2016-05-26 156 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删除绑定

相关问题