0

我希望(在 C# 中)使用 enumeration 的允许值填充组合框的允许值列表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吗?)并将其作为组合框的数据上下文:

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

  <ComboBox ...>
      <ComboBox.DataContext>
          <local:theParitySource />
      </ComboBox.DataContext>
  </ComboBox>

然而,组合框仍然是空的(它显示为空,但似乎具有正确的长度),即使我可以在调试器中看到如何theParitySource填充。这种方法确实适用于另一个组合框(即使在同一个类中),我为波特率执行此操作。我用整数值初始化,所以我想这与我在这里使用枚举的事实有关,但我不知道可能是什么原因。任何指针?我需要写一个转换器吗?

(当然我可以通过从枚举中创建一个字符串列表来解决这个问题,但这会有点不愉快......)

编辑:实际上我更愿意在 XAML 中完成所有这些工作。有没有一种简单的方法可以做到这一点?

4

2 回答 2

6

你可以在Xamlusing中做到这一切ObjectDataProvider

在您Window.Resources(或您正在使用的任何资源)中设置一个ObjectDataProvider.

ObjectDataProviderEnums您设置ObjectTypeto{x:Type sys:Enum}MethodNametoGetValues以填充ComboBox实际Enums值,或者您可以使用字符串表示形式GetNames来填充ComboBoxEnum

   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}}" />

结果:

在此处输入图像描述

于 2013-02-20T20:22:46.747 回答
1

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

您需要告诉它您想要显示绑定上下文的哪一部分以及您想要“选择”哪一部分。

WPF 组合框 DisplayMemberPath

于 2013-02-20T20:20:34.703 回答