簡體   English   中英

C#WPF MVVM ComboBox綁定

[英]C# WPF MVVM ComboBox Binding

首先,我想做的是將ComboBox綁定到我的源代碼上的“簡單”。

結構類似於:

public class Data
{
    public ObservableList<string> List {get;set;}
    public string Selected {get;set;}
}

此外,它實現INotifyPropertyChanged接口。 我的問題是,我找到了幾種通過XAML進行此操作的解決方案,但是不幸的是,我無法使用XAML進行此操作,因為必須在運行時生成ComboBoxes

所以我的問題是,我如何將我的ComboBox綁定到Data.List ,還將所選的項(值)綁定到Data.Selected,而這個應該是TwoWay這樣我的Data類就知道選擇了什么。 請記住,這必須通過c#代碼進行(不幸的是,XAML不能選擇)。

提前致謝。 :)

很簡單 假設該Data具有屬性而不是字段:

public class Data
{
    public Data()
    {
        List = new ObservableCollection<string>
        {
            "Apple", "Orange", "Lime"
        };
    }

    public ObservableCollection<string> List { get; private set; }
    public string Selected { get; set; }
}

你可以這樣寫:

var comboBox = new ComboBox
{
    DataContext = new Data()
};

comboBox.SetBinding(ComboBox.ItemsSourceProperty, new Binding("List"));
comboBox.SetBinding(ComboBox.SelectedItemProperty, new Binding("Selected") 
{ 
    Mode = BindingMode.TwoWay
});

要將ComboBox添加到可視樹中,只需為容器調用適當的方法即可。 例如,這將適用於任何ContentControl (例如Window ):

AddChild(comboBox);

我如何將我的組合框綁定到Data.List,以及選定的項目(值?)

創建一個包含組合框的自定義復合用戶控件。 將組合框的屬性映射到在自定義控件上創建的兩個依賴項屬性,一個用於加載數據,另一個用於提供按需選擇的項目的數據。 任何管道需求都在背后的代碼內完成,最終提供了所有魔力。

然后,您可以根據需要在正在處理的另一頁中的代碼背后動態創建/綁定此控件。

聽起來像是一種“遞歸綁定”。 如果您的組合位於容器控件中,則需要將容器綁定到單個組合模型的集合,因此ItemsControl中的每個視圖都將綁定到單個組合模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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