![](/img/trans.png)
[英]How to bind a Combobox to an ObservableCollection with SelectedItem dependant on ListBox?
[英]How to bind ComboBox to ObservableCollection property?
我想將ObservableCollections的string屬性綁定到ComboBox。
型號 :
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是名稱空間):
有人可以告訴我我在做什么錯嗎?
您需要指定項目的DataTemplate
。
<ComboBox x:Name="sequencesComboBox" SelectedIndex="0" ItemsSource="{Binding StoredSequences}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
除非您需要一些特殊的模板,否則無需在ComboBox
上設置ItemTemplate
。 您已經綁定到ItemSource
,因此要設置顯示成員路徑,只需為其提供屬性的字符串名稱:
<ComboBox x:Name="sequencesComboBox"
SelectedIndex="0"
ItemsSource="{Binding StoredSequences}"
DisplayMemberPath="Name" >
如果您說這有點尷尬,它的行為方式是我不會不同意的。
您不需要在DisplayMemberName中進行綁定。 從DisplayMemberPath刪除綁定
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.