Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# 如何将自定义对象的列表绑定到WPF中的DataGridComboxColumn?_C#_Wpf_Data Binding_Datagrid_Wpfdatagrid - Fatal编程技术网

C# 如何将自定义对象的列表绑定到WPF中的DataGridComboxColumn?

C# 如何将自定义对象的列表绑定到WPF中的DataGridComboxColumn?,c#,wpf,data-binding,datagrid,wpfdatagrid,C#,Wpf,Data Binding,Datagrid,Wpfdatagrid,我在这个网站上找到了一些例子,但我找不到任何可以用于我的案例的东西 我有一个DataGrid,带有AutoGeneratedColumn=“False”和ViewModel,它绑定到我的窗口的DataContext,其中有DataGrid。 在我的ViewModel中,我有一个名为Model的数据结构列表,它绑定到我的DataGrid的ItemsSource属性 该模型包含一个枚举。我能够为enum生成一个datagridcomboxcolumn,但我不知道如何为对象列表归档它 这是我的Mode

我在这个网站上找到了一些例子,但我找不到任何可以用于我的案例的东西

我有一个
DataGrid
,带有
AutoGeneratedColumn=“False”
ViewModel
,它绑定到我的窗口的
DataContext
,其中有
DataGrid
。 在我的
ViewModel
中,我有一个名为
Model
的数据结构列表,它绑定到我的
DataGrid
ItemsSource
属性

该模型包含一个
枚举
。我能够为enum生成一个
datagridcomboxcolumn
,但我不知道如何为对象列表归档它

这是我的
Model.cs
课程

public class Model
{
    public CType Type { get; set; }
    public Person Person { get; set; }
    public Condition Condition { get; set; }
}

public class Person
{
    public List<Trait> Traits { get; set; }
    public string Name { get; set; }
}

public class Condition
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Value { get; set; }
}

public class Trait
{
    public string Name { get; set; }
    public List<Reason> Reasons { get; set; }
}

public class Reason
{
    public string Name { get; set; }
}
这是我的
Window.xaml
文件,其中包含正在工作的枚举示例。 最后但并非最不重要的一点是,您可以将
DataContext
属性设置为代码隐藏中的
ViewModel
类的新实例

<Window x:Class="WpfApp2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp2"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Window.Resources>
    <ObjectDataProvider x:Key="myEnumData"
            MethodName="GetValues" 
            ObjectType="{x:Type sys:Enum}">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="local:CType" />
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Window.Resources>
<Grid>
    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Models}">
        <DataGrid.Columns>
            <DataGridComboBoxColumn 
                Header="Enum"
                ItemsSource="{Binding Source={StaticResource myEnumData}, Mode=OneWay}"
                SelectedValueBinding="{Binding Path=Type}">
            </DataGridComboBoxColumn>

            <!--ComboBox for Persons-->
            <DataGridComboBoxColumn>

            </DataGridComboBoxColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

试试这个:

<DataGridComboBoxColumn Header="Person" DisplayMemberPath="Name" SelectedItemBinding="{Binding Person}">
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding DataContext.Persons, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding DataContext.Persons, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>

<DataGridComboBoxColumn Header="Person" DisplayMemberPath="Name" SelectedItemBinding="{Binding Person}">
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding DataContext.Persons, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding DataContext.Persons, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>