使用可观察集合 wpf 绑定数据网格
本文关键字:绑定 数据 数据网 网格 wpf 集合 观察 | 更新日期: 2023-09-27 18:37:05
我有一个具有多列的数据网格,它具有itemsource={Binding},并且在代码隐藏中,我将DataContext设置为可观察集合
我的自定义类具有标题,类型,语言,类型1(自定义类),类型2(自定义类)等属性
现在我的问题是,在一列类型中,我有文本值说"A"或"B",现在如果值为 A,那么我的 customClass 的对象将具有 type1 的对象,并且 type2 设置为 null,如果类型具有值"B",则类型1设置为空,类型2 具有值。
现在在语言中,我想以这样的方式绑定,如果类型有 A,则取 type1.someProperty 的值,如果它有 B,则取 type2.someProperty 的值。
这是我的 XAML 中的内容
<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>
代码隐藏:
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");
}