让我们考虑以下动物Model
:
public class Animal
{
public string name { set; get; }
public int age { set; get; }
}
和Animal
对象的集合如下:
Dictionary<string, Dictionary<string, ObservableCollection<Animal>>> animals;
在我的ViewModel
我填充animals
喜欢:
var lions = new ObservableCollection<Animal>();
lions.Add(new Animal("myLion 1", 2));
var tigers = new ObservableCollection<Animal>();
tigers.Add(new Animal("myTiger 1", 1));
var wild = new Dictionary<string, ObservableCollection<Animal>>();
wild.Add("Lion", lions);
wild.Add("Tiger", tigers);
var cats = new ObservableCollection<Animal>();
cats.Add(new Animal("myCat 1", 2));
cats.Add(new Animal("myCat 2", 4));
var dogs = new ObservableCollection<Animal>();
dogs.Add(new Animal("myDog 1", 1));
var pets = new Dictionary<string, ObservableCollection<Animal>>();
pets.Add("cat", cats);
pets.Add("dog", dogs);
animals = new Dictionary<string, Dictionary<string, ObservableCollection<Animal>>>();
animals.Add("wild animals", wild);
animals.Add("pets", pets);
在View
I 中定义了两个ComboBox
es 和一个DataGrid
,描述如下:
- 第一个组合框项目是
"wild animals"
和"pets"
,SelectedItem
组合框的 绑定到 的selectedAnimalType
属性ViewModel
。 - 第二个组合框项绑定到第一个组合框选择;即,
"cat"/"dog"
或"lion"/"tiger"
分别为"pet"
或"wild animals"
。此SelectedItem
组合框的 绑定到 的selectedAnimalCategory
属性ViewModel
。 - 根据
DataGrid
两个组合框的选定值显示动物。
MyDataGrid
的定义和约束如下:
<DataGrid>
<DataGrid.ItemsSource>
<MultiBinding Converter="{StaticResource animalSelectionConverter}">
<Binding Path="selectedAnimalType"/>
<Binding Path="selectedAnimalCategory"/>
</MultiBinding>
</DataGrid.ItemsSource>
<DataGrid.Columns>
<DataGridTextColumn Header="Animal Type" Binding="{Binding Path=XYZ}"/> <!--The Question-->
<DataGridTextColumn Header="Name" Binding="{Binding name}"/>
<DataGridTextColumn Header="Age" Binding="{Binding age}"/>
</DataGrid.Columns>
</DataGrid>
最后,我定义AnimalSelectionConverter
如下:
public class AnimalSelectionConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ViewModel.Default.animals[(string)values[0]][(string)values[1]];
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
问题 :
我将选定的动物集合绑定Animal.name
到. 但是,我也有兴趣在. 例如,我想在我的:Animal.age
DataGrid
SelectedItem
selectedAnimalType
DataGrid
DataGrid
| Animal Type | Name | Age |
---------------------------------------
| pets | myCat 1 | 2 |
| pets | myCat 2 | 4 |
pets
被传递selectedAnimalType
给转换器,转换器使用此信息加上selectedAnimalCategory
来获取myCat 1
和myCat 2
。因此,是否可以从 中返回多个值,MultiValueConverter
以便我看到我DataGrid
的上述?
以防万一有人有兴趣查看可能的最小运行代码示例,我准备了我的问题的一个小项目,您可以在 DropBox 上找到源代码。