2011-11-03 22 views
4

ユーザーがいくつかの行を追加したい単純なDataGridがあります。 しかし、列の1つをComboBoxにして、その値をenumから取得します。DataGridComboBoxColumnをEnumにバインドする

私のXAMLでこれを行う最も簡単な方法は何ですか?

あなたが選択をバインドしようとしている私は、次の試してみたが、私はエラー

<Window.Resources> 
    <ObjectDataProvider x:Key="myEnumData" 
       MethodName="GetValues" 
       ObjectType="{x:Type sys:Enum}"> 
     <ObjectDataProvider.MethodParameters> 
      <x:Type TypeName="local:MyEnum" /> 
     </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 
</Window.Resources> 

「双方向バインディングがパスまたはXPathを必要とする」取得...

<DataGrid.Columns> 
     <DataGridComboBoxColumn Header="MyHeader" DisplayMemberPath="EnumValue" 
      SelectedItemBinding="{Binding Source={StaticResource myEnumData}}"> 
     </DataGridComboBoxColumn> 
    </DataGrid.Columns> 

答えて

8

(おそらく)使用可能なアイテムのリストをバインドしたいときに、アイテムを選択します。あなたのこれへの結合を変更します。

<DataGridComboBoxColumn Header="MyHeader" 
     ItemsSource="{Binding Source={StaticResource myEnumData}, Mode=OneWay}"> 
</DataGridComboBoxColumn> 
+0

こんにちはスティーブ、私は今、エラーを取得しない - 感謝を。ただし、ComboBoxは空です。私はDataGridが空であることを言及する必要があり、私はすべての行を埋めています(既存のデータはありません)。 – openshac

+0

あなたは 'ComboBox'に選択されたアイテムがないか、それをクリックするとドロップダウンにアイテムがないことを意味しますか? –

+0

ComboBoxに項目がないことを意味します。 – openshac

4

XAML

xmlns:ext="clr-namespace:Project.Core.Tools;assembly=Project.Core" 

<DataGridComboBoxColumn ItemsSource="{x:Static ext:Extensions.GetEnumTypes}" SelectedItemBinding="{Binding EnumType}" /> 

静的クラス

public static IEnumerable<EnumType> GetEnumTypes => Enum.GetValues(typeof(EnumType)).Cast<EnumType>(); 
関連する問題