我正在和WPF第一次合作,所以請耐心等待。如何將參數傳遞給ComboBox ItemsSource綁定?
我有一個組合框,這是爲了一般顯示一些查找數據。不同類型查找的模型完全相同,只是通過單個方法調用檢索的不同數據源通過不同的枚舉來控制返回的數據集。相當簡單的東西。
public sealed class MyDataProvider
{
public enum Types
{
Green,
Blue,
Orange
}
private readonly ConcurrentDictionary<string, ObservableCollection<LookUpVm>> _lookupData =
new ConcurrentDictionary<string, ObservableCollection<LookUpVm>>();
private static readonly Lazy<MyDataProvider> lazy =
new Lazy<MyDataProvider>(() => new MyDataProvider());
public static MyDataProvider Instance => lazy.Value;
private MyDataProvider()
{
}
public ObservableCollection<LookUpVm> GreenLookupDataSource => GetLookupDataSource(Types.Green);
public ObservableCollection<LookUpVm> GetLookupDataSource(Types lookupEnum)
{
ObservableCollection<LookUpVm> lookupDataSource;
if (_lookupData.TryGetValue(lookupEnum, out lookupDataSource))
return lookupDataSource;
lookupDataSource = new ObservableCollection<LookUpVm>();
var returnedlookupDataSource =
SomeMasterSource.GetlookupDataSourceBylookupEnum(lookupEnum).OrderBy(ia => ia.Name);
foreach (var returnedLookupData in returnedlookupDataSource)
{
lookupDataSource.Add(returnedLookupData);
}
_lookupData.TryAdd(lookupEnum, lookupDataSource);
return lookupDataSource;
}
}
這對於第0次迭代很有用,我創建了一個GreenLookupComboBox。
<ComboBox ItemsSource="{Binding Source={x:Static objectDataProviders:MyDataProvider.Instance},
Path=GreenLookupDataSource}" />
不過,我真正需要的是能夠做的是建立一個下拉框,可以有它的類型枚舉值父視圖設置,那麼這將直接打電話到GetLookupDataSource並通過枚舉。我們有幾十種查找類型,並且爲每種類型定義一個新屬性都不太理想。類似下面的控制視圖...
<ComboBox ItemsSource="{Binding Source={x:Static objectDataProviders:MyDataProvider.Instance},
Path=GetLookupDataSource}" />
而下面的東西,我使用查找控件。
<local:MyLookupControl Type=Types.Green />
這是可能的嗎?
編輯:
下面是我試圖完成的一個例子。
我有兩個鍵值對列表。
那麼listOne
1 - 甲
2 - B
3 - Visual C
和
ListTwo
1 - X
2 - Ÿ
3 - z
他們是通過調用方法的GetList(Enum.LookupType)訪問。他們共享相同的ViewModel和View。但是,我需要將它們放在一個表單上供我的用戶從中進行選擇。
我正在尋找一些方法來使用XAML,就像它們出現在視圖上一樣。
<local:MyLookupControl Method=GetList Parameter=Enum.ListOne/>
<local:MyLookupControl Method=GetList Parameter=Enum.ListTwo />
這應顯示一對組合框,一個綁定到ListOne,一個綁定到ListTwo。
最簡單的方法是給viewmodel一個Types屬性,它返回Enum.GetValues(typeof(Types)),Type SelectedType屬性和一個返回'GetLookupDataSource(SelectedType)'的SelectedTypeValues屬性。你可以將這三個屬性分解成一個子視圖模型'EnumCollectionThingy' –