我有一个带有两个SQL表的数据库,分别是SourceInspection表和InspectionStatus表:

c# - WPF MVVM父子关系-LMLPHP

我使用实体框架将表作为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),但是该属性将在每次枚举网格时运行,因此总体上不太理想。

10-08 03:42