ComboBox绑定到枚举,同时保留enumType值

时间:2011-06-24 12:24:45

标签: c# wpf xaml enums combobox

我正在将DataGrid中的ComboBox绑定到Enum值。我让ComboBox显示正确的值,但我遇到的问题是,当我尝试保存时,如果我使用ComboBox,则不会返回XML。如果我取出ComboBox,那么我的保存工作正常,返回XML并存储记录。

我假设这与我在ComboBox中没有设置Path属性这一事实有关,但是,如果我设置了Path属性,那么我的Enum值不会显示在ComboBox中。

我的Xaml:

<UserControl.Resources>
    <ObjectDataProvider x:Key="dataFromEnum"
                        MethodName="GetValues"
                        ObjectType="{x:Type sys:Enum}">
        <ObjectDataProvider.MethodParameters>
            <x:TypeExtension Type="local:enumTypes" />
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</UserControl.Resources>

  <DataGrid Grid.Row="3"
         Grid.Column="0"
         ItemsSource="{Binding Path=StuffList, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
    <DataGridTemplateColumn Header="Enum Stuff">
        <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                            <ComboBox ItemsSource="{Binding Source={StaticResource dataFromEnum}}"                                                          
                                                      SelectedValuePath="ID" />
                    </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
        <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox ItemsSource="{Binding Source={StaticResource dataFromEnum}}"                                                          
                                                      SelectedValuePath="ID" />
                    </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>
 </DataGrid>

我的班级:

private enumTypes _enumType = new enumTypes();
public enumTypes enumType
{
    get { return _ enumType; }
    set
    {
        _ enumType = value;
        NotifyPropertyChanged(p => enumType);
    }
}

我在SQL表中使用enumType值,需要发送/返回XML。但是因为我没有在任何地方绑定enumType,我认为这就是为什么没有给出XML?

有关如何更改我的ComboBox绑定以显示Enum值和绑定enumType字段以便我的XML可以修复的任何想法?

1 个答案:

答案 0 :(得分:0)

您的CellTemplate不应该是可编辑的,您还需要绑定SelectedItem,例如

<DataGridTemplateColumn Header="Enum Stuff">
    <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                        <TextBlock Text="{Binding ID}"/>
                </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{Binding Source={StaticResource dataFromEnum}}"                                                          
                              SelectedItem="{Binding ID}" />
                </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

(属性应该在PascalCase中,即大写enumType