2013-02-20 120 views
0

我希望(在C#中)使用枚举的允许值System.IO.Ports.Parity填充组合框的允许值列表。为此我创建了一个集合:在WPF中枚举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> 

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

(当然我可以解决此通过创建从枚举的字符串列表,但这将是一种不愉快的...)

编辑:其实我更愿意做这一切在XAML。有没有简单的方法来做到这一点?

回答

2

可以使用ObjectDataProvider

在你Window.Resources(或任何资源您正在使用)设置一个ObjectDataProvider做到这一切在Xaml

要设置ObjectDataProviderEnums您设置的ObjectType{x:Type sys:Enum}MethodNameGetValues填补ComboBox与实际Enums也可以使用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> 
字符串表达中,以填补 ComboBox

然后绑定到您的ComboBox

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

结果:

enter image description here

+0

非常感谢,这看起来完全一样,我想它:-) – Thomas 2013-02-20 20:43:41

1

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

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

WPF Combobox DisplayMemberPath

+0

,你可能想看看MVVM模式做这个东西,这是伟大的具有包含的类视图“饲料关”。 – BaconSah 2013-02-20 20:21:25

+0

我没有使用波特率的路径。这看起来完全一样,它确实工作。 – Thomas 2013-02-20 20:22:51

+0

好的,我明白了。谢谢。 – Thomas 2013-02-20 20:44:34