我有一个带有两个SQL表的数据库,分别是SourceInspection表和InspectionStatus表:
我使用实体框架将表作为MVVM引入。
SourceInspection表显示为WPF数据网格。
我想有一个名为“ KeyColumn”的文本框列,并且当sourceinspection表中的特定deliveryID在检查状态表中有一条文档ID为“ ABC”的记录时,
我想将键列颜色为橙色。
我觉得执行此操作的正确方法是使用数据绑定,而不是遍历后面代码中的每个项目。我认为将需要数据触发,因此我创建了以下内容:
<Window.Resources>
<CollectionViewSource x:Key="SourceViewSource" d:DesignSource="{d:DesignInstance {x:Type local:SourceInspection}, CreateList=True}" />
<CollectionViewSource x:Key="InspectionStatusViewSource" d:DesignSource="{d:DesignInstance {x:Type local:InspectionStatu}, CreateList=True}"/>
<Style TargetType="{x:Type DataGridCell}" x:Key="ValidateStatus" >
<Style.Triggers>
<DataTrigger>
<DataTrigger.Conditions>
<Condition Binding="{Binding Path=InspectionStatusViewSource.DocumentID}" Value="ABC"/>
</DataTrigger.Conditions>
<Setter Property="Background" Value="Orange"></Setter>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
我很确定我没有正确的绑定。
这是正确的方法吗?还是需要循环遍历列表的代码?单个deliveryID可能有多个documentID。
对XAML的任何帮助都会很棒。
提前致谢,
嘉里
最佳答案
您在这里使用DataTrigger
的直觉是好的,但不是您这样做的方式。
您具有的绑定仅针对单个SourceInspection
,这就是为什么您的绑定不起作用的原因(该对象上不存在InspectionStatusViewSource
)。此外,假设触发器可以使您工作,那么让触发器为您执行循环是一个潜在的性能隐患。
我建议您采用这两个模型对象,并在您的视图模型或服务中使用LINQ创建一个预整理了文档ID等的自定义视图模型对象。该对象将具有一个额外的属性(例如HasABC
),该属性随后将被数据触发器关闭。
您可以在EF对象上创建一个计算属性(相同的HasABC
),但是该属性将在每次枚举网格时运行,因此总体上不太理想。