2016-05-26 7 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)); 
    } 
} 

のViewModel:

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がstringプロパティを表示しないことを確認します。 (NQR_GUI_WPFは名前空間です)以下の画像を参照してください:

enter image description here

誰かが私が間違ってやっているものを私に教えてくださいことはできますか?

答えて

0

あなたには、いくつかの特別なテンプレートをしたい場合を除き、あなたはあなたのComboBoxItemTemplateを設定する必要はありません。あなたはそれが一種のぎこちないと言った場合

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

それは私が「wouldnこのように動作:あなたはすでに、あなたはそれにプロパティの文字列名を与えるので、表示部材のパスを設定するには、あなたのItemSourceにバインドしました同意しない。

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からバインディングを削除する

関連する問題