C# 将Datagrid与可观测集合wpf绑定
我有一个具有多列的Datagrid,它有itemsource={Binding},在代码隐藏中,我将DataContext设置为ObservableCollection 我的customClass具有标题、类型、语言、type1(customClass)、type2(customClass)等属性 现在我的问题是,在一个列类型中,我有文本值,比如“A”或“B”,如果值是A,那么customClass的对象将有一个type1的对象,type2设置为null,如果type有值“B”,那么type1设置为null,type2有值 现在在语言中,我想用这样一种方式绑定,如果类型有a,那么取值为type1.someProperty,如果它有B,那么取值为type2.someProperty 这是我的xaml中的内容C# 将Datagrid与可观测集合wpf绑定,c#,wpf,xaml,binding,datagrid,C#,Wpf,Xaml,Binding,Datagrid,我有一个具有多列的Datagrid,它有itemsource={Binding},在代码隐藏中,我将DataContext设置为ObservableCollection 我的customClass具有标题、类型、语言、type1(customClass)、type2(customClass)等属性 现在我的问题是,在一个列类型中,我有文本值,比如“A”或“B”,如果值是A,那么customClass的对象将有一个type1的对象,type2设置为null,如果type有值“B”,那么type1设
<DataGrid x:Name="dg_Content" Margin="0,60,-0.4,0" VerticalAlignment="Top" Height="505" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding}" AutoGenerateColumns="False" ColumnWidth="*">
<DataGrid.Columns>
<DataGridTextColumn Header="Title" Binding="{Binding _title}"/>
<DataGridTextColumn x:Name="dgType" Header="Content Type" Binding="{Binding _type}"/>
<DataGridTextColumn Header="Language">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Binding="{Binding ElementName=dgType, Path=Content}" Value="A" />
</MultiTrigger.Conditions>
<Setter Property="Content" Value="{Binding type1.someProperty}" />
</MultiTrigger>
</Style.Triggers>
</Style></DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Created At" Binding="{Binding _createdAt}"/>
<DataGridTemplateColumn Header="Edit/View">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Edit/View" Click="View_Click"></Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
有人能帮我吗?如果有人需要,我是这样做的 Xaml代码:
<DataGrid x:Name="DgContent" Margin="0,60,-0.4,0" VerticalAlignment="Top" Height="505" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" CanUserAddRows="False" ItemsSource="{Binding}" AutoGenerateColumns="False" ColumnWidth="*">
<DataGrid.Columns>
<DataGridTextColumn Header="Title" Binding="{Binding Title}"/>
<DataGridTextColumn Header="Content Type" Binding="{Binding Type}"/>
<DataGridTextColumn Header="Language">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource ResourceKey=Content}">
<Binding Path="{x:Static local:MainWindow.cl}"></Binding>
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="Created At" Binding="{Binding CreatedAt}"/>
<DataGridTemplateColumn Header="Edit/View">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Edit/View" Click="View_Click"></Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
@Bum我也尝试了多值转换器,但我的可观察集合在主窗口中,当我将IMultivalueConvertor实现到我的customClass时,我不知道如何获取类型的值以进一步检查…@Bum在我的customClass中,我有一个名为'type'(字符串)、'type1'(自定义类)和'type2'(自定义类)的属性它可以有值“A”或“B”,如果是A,那么我用一些值初始化type1,type2=null,反之亦然。@我将再次解释,我有一个wpf应用程序,带有主窗口和三个类,分别是“customClass”、“Type1Class”和“Type2Class”。customClass具有标题(字符串)、类型(字符串)、语言(字符串)、类型1(类型1类)和类型2(类型2类)等属性。在mainWindows中,我将DataGrid的dataContext绑定到observableCollection,并填充值。现在,根据customClass.type的值,属性type1或type2一次初始化,只有一个对象具有值,另一个为null(如果type为'a',则type1对象初始化,type2保持null)。让我们来看看。
public object Convert(object[] values, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
try
{
if (((Content)values[0]).Type == "movie")
{
return ((Content)values[0]).Movie.Language;
}
else
return ((Content)values[0]).Video.Language;
}
catch (Exception e)
{ return "EXception"; }
}
public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException("Cannot convert back");
}