我有两个WPF数据网格。当从第一个数据网格dg1中选择一行时,第二个数据网格中名为“注释”的列dg2应仅显示为空字符串,并且仅当dg1中所选行的“注释类型”列的内容相等时才显示到“我”。否则,dg2中“Notes”列的内容应该是来自Notes的集合ItemsDg2中的内容。
我的问题是,当值为“I”时,dg1中“Note Type”列的内容显示在dg2的“Notes”列中,而不是显示空字符串。
<Window x:Name="MainWindow"
xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<my:DataGrid Name="dg1" ItemsSource="{Binding Path=ItemsDg1}">
<my:DataGrid.Columns>
<my:DataGridTextColumn x:Name="iType" Binding="{Binding Path=Type}" Header="Note Type"/>
</my:DataGrid.Columns>
</my:DataGrid>
<my:DataGrid Name="dg2" ItemsSource="{Binding Path=ItemsDg2}">
<my:DataGrid.Columns>
<my:DataGridTextColumn Binding="{Binding Path=Notes}" Header="Notes">
<my:DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="{Binding Path=Notes}"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedItem.Type, ElementName=dg1}" Value="I">
<Setter Property="Text" Value="{x:Static sys:String.Empty}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</my:DataGridTextColumn.ElementStyle>
</my:DataGridTextColumn>
</my:DataGrid.Columns>
</my:DataGrid>
</Window>
ItemsDg1是It1的列表
ItemsDg2是It2的列表
public Class It1
{
private string _type;
public string Type
{
get { return _type; }
set
{
if (!_type.Equals(value))
{
_type = value;
}
}
}
}
public Class It2
{
private string _notes;
public string Notes
{
get { return _notes; }
set
{
if (!_notes.Equals(value))
{
_notes = value;
}
}
}
}
类It1和It2有更多属性,但我只在这里显示理解场景的最小值。这同样适用于dg1和dg2,它们有更多的datagrid列。
答案 0 :(得分:0)
如果我理解正确,您应该通过替换Notes
中的dg2
列定义来获得所需的结果,如下所示:
<DataGridTemplateColumn Header="Notes">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock x:Name="CellText" Text="{Binding Notes}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding SelectedItem.Type, ElementName=dg1}" Value="I">
<Setter TargetName="CellText" Property="Text" Value="" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>