我希望(在C#中)使用枚举System.IO.Ports.Parity
的可允许值填充组合框的可允许值列表。为此我创建了一个集合:
public class theParitySource : ObservableCollection<Parity>
{
public theParitySource()
{
Array parities = System.Enum.GetValues( typeof( Parity ) );
foreach (Parity p in parities) this.Add(p);
}
}
(顺便说一句:这个初始化是否有oneliner?)并将其作为组合框的datacontext:
...
xmlns:local="clr-namespace:myNamespace"
...
<ComboBox ...>
<ComboBox.DataContext>
<local:theParitySource />
</ComboBox.DataContext>
</ComboBox>
然而,组合框保持为空(它显示为空,但似乎具有正确的长度),即使我在调试器中可以看到如何填充theParitySource
。这种方法可以在另一个组合框中工作(即使在同一类中)也可以用于波特率。我用整数值初始化,所以我猜它在某种程度上与我在这里使用枚举这一事实相关,但我是clueluess可能是什么原因。有什么指针吗?我需要写一个转换器吗?
(当然,我可以通过从枚举中创建一个字符串列表来解决这个问题,但这会有点令人不快......)
编辑:实际上我更喜欢在XAML中完成所有这些工作。有没有一种简单的方法可以做到这一点?
答案 0 :(得分:3)
您可以使用Xaml
ObjectDataProvider
中完成所有操作
在Window.Resources
(或您正在使用的任何资源)中设置ObjectDataProvider
。
要为ObjectDataProvider
设置Enums
,请将ObjectType
设置为{x:Type sys:Enum}
,将MethodName
设置为GetValues
以填充ComboBox
使用实际的Enums
,或者您可以使用GetNames
使用ComboBox
Enum
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:io="clr-namespace:System.IO.Ports;assembly=System"
<Window.Resources>
<ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="ParityValues">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="io:Parity" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
然后绑定到您的ComboBox
<ComboBox ItemsSource="{Binding Source={StaticResource ParityValues}}" />
结果:
答案 1 :(得分:1)
您需要绑定到正确的路径,您可能正在设置其数据上下文,但您没有告诉它要显示属性。
您需要告诉它您想要显示的界限上下文的哪一部分以及您想要“选择”哪一部分。