2016-05-26 9 views
0

Ich möchte eine String-Eigenschaft von ObservableCollections an eine ComboBox binden.Wie binden Sie ComboBox an ObservableCollection-Eigenschaft?

Modell:

class Sequence : INotifyPropertyChanged 
{ 
    public Sequence() { } 

    private int _id; 
    public int ID 
    { 
     get 
     { 
      return _id; 
     } 
     set 
     { 
      _id = value; 
      OnPropertyChanged("ID"); 
     } 
    } 
    private string _name; 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 

public event PropertyChangedEventHandler PropertyChanged; 
     protected virtual void OnPropertyChanged(string propertyName) 
     { 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Ansichtsmodell:

private ObservableCollection<Sequence> _storedSequences = new ObservableCollection<Sequence>() { }; 
    public ObservableCollection<Sequence> StoredSequences { get { return _storedSequences; } } 

anzeigen XAML:

<ComboBox x:Name="sequencesComboBox" SelectedIndex="0" ItemsSource="{Binding StoredSequences}" DisplayMemberPath="{Binding Name}" > 

Das Problem ist, dass die ComboBox die Zeichenfolgeneigenschaft nicht anzeigt. Siehe folgendes Bild (NQR_GUI_WPF ist der Namespace):

enter image description here

Kann jemand bitte sagen Sie mir, was ich falsch mache?

Antwort

0

Es sei denn, Sie eine spezielle Vorlage verwenden möchten, brauchen Sie nicht die ItemTemplate auf ComboBox einzustellen. Sie haben bereits Ihre ItemSource gebunden, so das Anzeigeelement Pfad zu setzen, geben Sie es einfach in den String Namen der Eigenschaft:

<ComboBox x:Name="sequencesComboBox" 
      SelectedIndex="0" 
      ItemsSource="{Binding StoredSequences}" 
      DisplayMemberPath="Name" > 

Wenn Sie sagte, es Art von peinlich war es auf diese Weise verhält ich wouldn‘ t nicht einverstanden.

0

Sie müssen die DataTemplate des Artikels angeben.

<ComboBox x:Name="sequencesComboBox" SelectedIndex="0" ItemsSource="{Binding StoredSequences}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
0

Sie benötigen keine Bindung in DisplayMemberName. Entfernen Sie die Bindung von DisplayMemberPath