我正在和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' –