2016-05-26 151 views
0

我想將一個ObservableCollections的字符串屬性綁定到一個ComboBox。如何將ComboBox綁定到ObservableCollection屬性?

型號

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)); 
    } 
} 

視圖模型:

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

查看XAML:

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

的問題是ComboBox不顯示字符串屬性。見下圖(NQR_GUI_WPF是命名空間):

enter image description here

有人能告訴我什麼,我做錯了什麼?

回答

0

除非你想要一些特殊的模板,你並不需要設置ItemTemplateComboBox。你已經綁定到您的ItemSource,所以設置顯示部件的路徑,你只要給它的屬性的字符串名稱:

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

如果你說這是一種笨拙的它的行爲這種方式我不會」不同意。

0

您需要指定該項目的DataTemplate

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

您不需要在DisplayMemberName中進行綁定。從DisplayMemberPath刪除綁定

相關問題