簡體   English   中英

具有自定義ItemSource綁定的WPF ComboBox

[英]WPF ComboBox with custom ItemSource binding

在我的應用程序中,我有很多ComboBox其中包含用戶預定義的項目列表。 我不想在ViewModel上添加所有列表(也許我錯了)。 我更喜歡向MyComboBox控件(從ComboBox繼承的新控件)中添加一個附加參數,並帶有要從數據庫中加載的列表ID。 例如:

<MyComboBox ItemsSourceId = "SAMPLE_ID" SelectedItem = "{Binding valueCode}" />

在后面的代碼中,我將執行查詢並將結果綁定到ItemSource

SELECT itemCode, itemValue FROM UserDictionaries WHERE itemListCode = 'SAMPLE_ID'

是好主意還是壞主意? 也許您有一些示例代碼? ;)

解決方案的優勢:更加清潔的ViewModel。 缺點:控制數據庫上下文。

為什么不要將其放入ViewModel 這正是ViewModel的用途。 如果將其放置在自定義ComboBox的代碼后面,則將MVVM的目的,因為ComboBox現在依賴於數據庫。 您應該爭取的是擁有“松散耦合”的組件,然后讓ViewModel將數據提供給View

您可以執行以下操作:

public class ViewModel
{
    private _itemSource;
    public List<Entity> ItemSource 
    {
        get { return _itemSource; }
        private set 
        {
            _itemSource = value;
            RaisePropertyChanged("ItemSource");
        }
    }

    private void UpdateItemSource(int sampleId)
    {
        var newItems = SELECT itemCode, itemValue FROM UserDictionaries WHERE itemListCode = 'SAMPLE_ID';

        ItemSource = null;
        ItemSource = newItems;
    }
}

然后將您的XAML更新為:

<ComboBox ItemSource="{Binding ItemSource, UpdateSourceTrigger=PropertyChanged}" SelectedItem = "{Binding valueCode}" />

暫無
暫無

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

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