2013-02-20 100 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