Tag: WPF ComboBox
参考情報†
プロパティ†
- 同じような名前のプロパティがあって混乱するのでまとめ。
- ComboBoxのItemsSourceにカスタムオブジェクトのリストをバインディングしている場合を考える(例) Animalクラスのオブジェクト)。
DisplayMemberPath†
- コンボボックスに表示するオブジェクトのプロパティ名。
- 例)AnimalクラスのNameプロパティ。
DisplayMemberPath="Name"
SelectedItem†
SelectedValuePath†
SelectedValue†
ComboBoxにカスタムオブジェクトのリストをバインディングする例†
- ViewModelにAnimaのリストを持ち画面に表示。
- ComboBoxに表示するのはAnimalのNameプロパティ。
- ViewModelに設定するのは選択されたAnimalのIdプロパティ。
XAML†
<ComboBox ItemsSource="{Binding Animals}" SelectedItem="{Binding Animal}"
DisplayMemberPath="Name"
SelectedValuePath="Id"
SelectedValue="{Binding AnimalId}"
/>
<Button Click="Button_Click">検証</Button>
Animal.cs†
public class Animal
{
public int Id { get; set; }
public string Name { get; set; }
public override string ToString()
{
return string.Format("{0} {1}", Id, Name);
}
}
ViewModel.cs†
public class SimpleComboBox2WindowViewModel :INotifyPropertyChanged
{
public SimpleComboBox2WindowViewModel()
{
this.Animals = new ObservableCollection<Animal>() {
new Animal() {Id = 1, Name="ゾウ"},
new Animal() {Id = 2, Name="ライオン"},
new Animal() {Id = 3, Name="トラ"},
};
this.animalId = 2;
}
public ObservableCollection<Animal> Animals { get; set; }
private int animalId;
public int AnimalId
{
get
{
return animalId;
}
set
{
if (animalId != value)
{
animalId = value;
this.NotifyPropertyChanged("AnimalId");
}
}
}
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}