C# WPF中枚举System.IO.Ports.Parity的组合框

C# WPF中枚举System.IO.Ports.Parity的组合框,c#,.net,wpf,combobox,C#,.net,Wpf,Combobox,我希望(用C#)用枚举System.IO.Ports.Parity的允许值填充组合框的允许值列表。为此,我创建了一个集合: public class theParitySource : ObservableCollection<Parity> { public theParitySource() { Array parities = System.Enum.GetValues( typeof( Parity ) );

我希望(用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);            
    }
}
public类paritysource:observetecollection
{
public theParitySource()
{            
数组平价=System.Enum.GetValues(typeof(奇偶校验));
foreach(平价p)加上(p);
}
}
(顺便说一句:是否有用于此初始化的oneliner?)并将其作为组合框的datacontext:

  ...
  xmlns:local="clr-namespace:myNamespace"
  ...

  <ComboBox ...>
      <ComboBox.DataContext>
          <local:theParitySource />
      </ComboBox.DataContext>
  </ComboBox>
。。。
xmlns:local=“clr namespace:myNamespace”
...
但是,组合框仍然为空(显示为空,但似乎长度正确),即使我可以在调试器中看到如何填充paritySource。这种方法在另一个组合框(即使是在同一个类中)中也可以使用,在这里我是以波特率进行操作的。我用整数值初始化,所以我猜这与我在这里使用枚举这一事实有关,但我不知道原因是什么。有什么建议吗?我需要写一个转换器吗

(当然,我可以通过从enum创建字符串列表来解决这个问题,但这有点令人不快…)


编辑:事实上,我更喜欢在XAML中完成这一切。有一种简单的方法可以做到这一点吗?

您需要绑定到一个正确的路径,您可能正在设置它的数据上下文,但您没有告诉它要显示的属性

您需要告诉它您希望显示的绑定上下文的哪一部分,以及您希望被“选中”的内容


您可以在
Xaml
中使用
ObjectDataProvider

窗口中。资源
(或您正在使用的任何资源)设置
对象数据提供程序

要为
Enum
设置
ObjectDataProvider
,请将
ObjectType
设置为
{x:Type sys:Enum}
MethodName
to
GetValues
用实际的
Enum
填充
组合框
,或者您可以使用
GetNames
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>
xmlns:sys=“clr命名空间:系统;程序集=mscorlib”
xmlns:io=“clr命名空间:System.io.Ports;assembly=System”
然后绑定到您的组合框

 <ComboBox ItemsSource="{Binding Source={StaticResource ParityValues}}" />

结果:


您可能想检查一下MvvM模型,看看它是如何完成这项工作的,它非常适合包含视图“反馈”的类。我也没有为波特率使用路径。这看起来一模一样,而且确实有效。非常感谢,这看起来正是我想要的:-)