我有一个WPF应用程序,其中包含两个下拉框(我们称它们为cbox1和cbox2)。 cbox1通过XAML将ItemsSource绑定到枚举值,如下所示:
<Window.Resources>
<local:EnumDescriptionConverter x:Key="enumDescriptionConverter"/>
<ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="cbox1DataProvider">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:MyModel+ModeOfTransportationEnum"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<ComboBox x:Name="cbox1" ItemsSource="{Binding Source={StaticResource cbox1DataProvider}}" SelectionChanged="cbox1_SelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource enumDescriptionConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
的ItemsSource绑定的枚举看起来像这样:
public enum ModeOfTransportationEnum
{
[Description("BMW X5")]
BmwX5,
[Description("Toyota Camry")]
ToyotaCamry,
[Description("Ford Focus")]
FordFocus
}
当用户在cbox1中选择一项时,我希望能够动态地为cbox2定义ItemsSource。例如,如果用户从cbox1中选择“Toyota Camry”,我希望cbox2显示“红色”和“黑色”这两个值。如果用户从cbox1中选择“Ford Focus”,我可能想让cbox2显示“银色”,“红色”和“蓝色”。
我的示例可能过于简单,但总的来说,我有三个枚举类型,我想将它们用作cbox2的ItemsSource绑定。根据用户在cbox1中选择的内容,我想为cbox2设置相应的枚举类型作为ItemsSource。我认为可以通过类似以下代码实现:
cbox2.SetBinding(ComboBox.ItemsSourceProperty, new Binding("AppropriateEnumGoesHere"));
很遗憾,这似乎不起作用。 我没有收到任何错误提示,但我也没有看到我的枚举值显示在cbox2中。 此外,正如您在上面的cbox1的XAML中所看到的,我正在使用转换器来显示每个枚举值的描述属性。 我想要用作cbox2 .ItemsSource的枚举也具有我想要显示而不是原始枚举值的描述属性,我也不确定代码应该如何工作。 有人可以指点我正确的方向吗? 谢谢!