gpt4 book ai didi

c# - WPF MVVM 父子关系

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:11 30 4
gpt4 key购买 nike

我有一个包含两个 SQL 表的数据库,一个 SourceInspection 表和一个 InspectionStatus 表:

enter image description here

我使用 Entity Framework 将表作为 MVVM 引入。

SourceInspection 表显示为 WPF 数据网格。

我想要一个名为“KeyColumn”的文本框列,当 sourceinspection 表中的特定 deliveryID 在检查状态表中有一条记录的 documentID 为“ABC”然后我想将键列涂成橙色。

我觉得这样做的正确方法是使用数据绑定(bind),而不是循环遍历隐藏代码中的每个项目。我认为需要数据触发器,因此我创建了以下内容:

 <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>

我很确定我的绑定(bind)不正确。

  1. 这是正确的方法还是需要循环遍历列表的代码?一个 deliveryID 可以有多个 documentID。

任何有关 XAML 的帮助都会很棒。

提前致谢

克里

最佳答案

您对此处使用 DataTrigger 的直觉很好,只是不是您使用的方式。

您的绑定(bind)针对单个 SourceInspection 起作用,这就是为什么您的绑定(bind)不起作用(InspectionStatusViewSource 在该对象上不存在)。此外,让触发器为您执行循环是一个隐藏的性能风险,假设您可以让它工作。

我建议采用这两个模型对象,并在您的 View 模型或服务中使用 LINQ 创建一个自定义 View 模型对象,该对象已预先整理文档 ID 等。该对象将有一个额外的属性(比如 HasABC),数据触发器随后会关闭。

您可以在 EF 对象上创建计算属性(相同的 HasABC),但每次网格枚举时都会运行,因此总体而言不太理想。

关于c# - WPF MVVM 父子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59178876/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com