0

我有两个 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,它们有更多的数据网格列。

4

1 回答 1

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>
于 2018-01-09T17:48:52.480 回答