【发布时间】:2018-06-18 19:15:09
【问题描述】:
我有两个 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,它们有更多的数据网格列。
【问题讨论】:
-
这很令人困惑。你是说
ItemsDg1和ItemsDg2包含相同数量的项目,ItemsDg2中的每个项目对应于ItemsDg1中相同索引的项目?如果是这样,你为什么要这样构建它? -
@MikeStrobel 否,ItemsDg1 和 ItemsDg2 的项目数不同。
-
在我修复了无法编译的内容(
Class,该名称空间中没有DataGrid)和无法运行的内容(在您的版本中,您在调用_type.Equals()之前,不能将_type设置为非 null)。无论您在实际代码中遇到什么问题,都可以在创建此示例时修复它。或者您实际上是在使用不同的 DataGrid 控件吗?如果是这样,我在哪里可以找到它进行测试?
标签: wpf mvvm binding datagrid datagridtextcolumn