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>