【发布时间】:2014-01-26 14:38:44
【问题描述】:
我有一个 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>
cbox1 的 ItemsSource 绑定的枚举如下:
public enum ModeOfTransportationEnum
{
[Description("BMW X5")]
BmwX5,
[Description("Toyota Camry")]
ToyotaCamry,
[Description("Ford Focus")]
FordFocus
}
当我的用户在 cbox1 中选择一个项目时,我想为 cbox2 动态定义 ItemsSource。例如,如果我的用户从 cbox1 中选择“Toyota Camry”,我希望 cbox2 显示值“Red”和“Black”。如果用户从 cbox1 中选择“福特福克斯”,我可能希望 cbox2 显示“银色”、“红色”和“蓝色”。
我可能过度简化了示例,但简而言之,我有三个枚举,我想将它们用于 cbox2 的 .ItemsSource 绑定。我想根据用户在 cbox1 中选择的内容将适当的枚举设置为 cbox2 的 .ItemsSource。我在想这可以通过类似的东西来完成:
cbox2.SetBinding(ComboBox.ItemsSourceProperty, new Binding("AppropriateEnumGoesHere"));
不幸的是,这似乎不起作用。我没有收到错误或任何东西,但我也没有看到我的枚举值显示在 cbox2 中。此外,正如您在上面的 cbox1 的 XAML 中所见,我使用转换器来显示每个枚举值的描述属性。我想用作 cbox2 的 .ItemsSource 的枚举也有我想显示的描述属性,而不是原始枚举值,我也不确定代码应该如何工作。谁能指出我正确的方向?谢谢!
【问题讨论】:
标签: wpf binding combobox itemssource