簡體   English   中英

如何將ComboBox綁定到ObservableCollection屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM