Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 组合框绑定到枚举,同时保留枚举类型值_C#_Wpf_Xaml_Enums_Combobox - Fatal编程技术网

C# 组合框绑定到枚举,同时保留枚举类型值

C# 组合框绑定到枚举,同时保留枚举类型值,c#,wpf,xaml,enums,combobox,C#,Wpf,Xaml,Enums,Combobox,我正在将DataGrid中的组合框绑定到枚举值。我让ComboBox显示正确的值,但我遇到的问题是,当我尝试保存时,如果使用ComboBox,则不会返回任何XML。如果我取出组合框,那么我的保存工作正常,返回XML并存储记录 我假设这与我没有在ComboBox中设置Path属性有关,但是,如果我设置了Path属性,则我的枚举值不会显示在ComboBox中 我的Xaml: <UserControl.Resources> <ObjectDataProvider x:Key=

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

我假设这与我没有在ComboBox中设置Path属性有关,但是,如果我设置了Path属性,则我的枚举值不会显示在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>
我在SQL表中使用enumType值,需要它来发送/返回XML。但是因为我没有在任何地方绑定enumType,所以我认为这就是为什么没有给出XML的原因


关于如何更改我的组合框绑定以显示枚举值和绑定enumType字段以修复我的XML,您有什么想法吗?

您的
单元格模板不应是可编辑的,您还需要绑定
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

这样的问题已经很多了。请参见此处:是的,关于wpf枚举有很多问题,但几乎所有问题都涉及1)如何将ItemsSource属性绑定到枚举,以及2)如何将枚举名称转换为UI中的“枚举名称”。您的问题非常令人困惑,因为您似乎在问这种类型的问题,但事实上您正在谈论某种XML(MySql枚举类型列表?不知道,不是MySql)。我强烈建议你澄清1)heck枚举类型是什么,它来自哪里,2)它看起来像什么。
<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>