2017-05-08 6 views
0

für eine Anwendung ich bin im Entwickeln im Umgang mit Bluetooth-Geräten. Jedes dieser Geräte hat einen Namen und mehrere Dienste. Ich versuche, sie und ihre Dienste programmatisch zu zeigen.Bindung an eine Liste in einer Klasse

Dazu habe ich eine Klasse mit der Liste der Dienste erstellt. Beim Versuch, jedoch zu binden, scheint die Liste der Dienste vollständig leer zu sein.

XAML:

public class BluetoothDevices 
{ 
    public string Name{ get; set;} 
    //public List<Guid> Services { get; set; } 
    public List<string> Services { get; set; } 
} 

XAML:

 <ListView.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Path=Name}" Width="150" /> 
        <ListView ItemsSource="{Binding}"> 
         <ListView.ItemTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding Services}"/> 
          </DataTemplate> 
         </ListView.ItemTemplate> 
        </ListView> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

C#:

 adapter.ScanForBroadcasts(async (IBlePeripheral peripheral) => 
     { 
      //List<Guid> services = new List<Guid>(); 
      List<string> services = new List<string>(); 

      string devicename = peripheral.Advertisement.DeviceName; 
      var _services = peripheral.Advertisement.Services; 
      var servicedata = peripheral.Advertisement.ServiceData; 
      //services = (_services.ToList()); 


      await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
      () => 
      { 
       services.Add("i am a string "); 
       BluetoothDevices.Add(new BluetoothDevices { Name = devicename, Services = services }); 
      }); 
      //BluetoothDevices = new ObservableCollection<BluetoothDevices>(BluetoothDevices.Distinct()); 
     }, TimeSpan.FromSeconds(30)); 
+0

Verwenden 'ObservableCollection' statt' list' verbindlich. "List" benachrichtigt niemanden, wenn Sie Elemente hinzufügen, sodass Sie nichts sehen, das nach der Erstellung der Benutzeroberfläche hinzugefügt wurde. 'ObservableCollection' tut das. Wenn das nicht behoben wird, binden Sie es wahrscheinlich falsch. Ist 'BluetoothDevices' dein Viewmodel oder etwas anderes? Es sollte 'INotifyPropertyChanged' implementiert werden. Beachten Sie auch Degents richtigen Vorschlag. –

+0

Ich dachte mir, dass das nicht das Problem wäre, da ich die Liste erstelle und dann das Objekt zur observablecollection hinzufüge. EDIT: selbst mit verschachtelten observablecollections funktioniert es nicht. –

+0

Welche beobachtbare Sammlung? Was bedeutet "verschachtelte Observablecollections"? Sagen Sie, dass 'BluetoothDevices' eine ObservableCollection ist? Übrigens ist es immer sicher anzunehmen, dass mindestens eine Ihrer Annahmen über die Ursache des Problems falsch ist - sonst wären Sie nicht hier, um Hilfe zu bitten. –

Antwort

1

ändern dergleichen diese Bindung. Ich nehme an, dass Sie möchten, dass diese innere ListView alle verfügbaren Dienste zeigt. Dazu müssen Sie die Services Liste an die ItemsSource Ihrer ListView binden, so dass jedes Element in der Liste ein Element in der ListView ist. Bei Verwendung von Text="{Binding}" ist der Textblock direkt an jede Instanz der Sammlung gebunden (in diesem Fall ist die string direkt an die Text gebunden). So ändern Sie Ihre Bindungen wie folgt:

<ListView ItemsSource="{Binding Services}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding}"/> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

Hoffe, dass dies hilft!

EDIT: Added Erklärung für

+0

Das tut es, ich hatte zuvor versucht, es an Services selbst zu binden, was nicht funktioniert hat. Wenn ich das richtig verstehe, bezieht sich die Bindung auf das Objekt, das als Item-Source gebunden ist? –

+0

Ja 'Services' müssen an die' ItemsSource' gebunden sein, damit 'ListView' korrekt funktioniert. Ich fügte auch einige Erklärung in der Antwort hinzu – degant

+0

vielen Dank, die MSDN-Dokumentation war nicht sehr klar auf diesem –

Verwandte Themen