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