You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将WinUI3 CommunityToolkit DataGrid绑定多模型联合查询的ObservableProperty

解决WinUI3 DataGrid绑定LINQ关联查询结果的问题

步骤1:创建强类型DTO类

定义一个包含所需字段的实体类,替代匿名类型,这样就能作为可观察属性的类型使用:

public class JoinedTableDto
{
    // 请根据Table1、Table2中对应字段的实际类型修改属性类型
    public string ColumnA { get; set; }
    public string ColumnB { get; set; }
    public string ColumnC { get; set; }
    public string ColumnD { get; set; }
}

步骤2:修改LINQ查询,生成DTO集合

将原LINQ查询中的匿名类型替换为上面创建的JoinedTableDto,并转换成ObservableCollection(DataGrid绑定需要可观察集合来支持UI更新):

IEnumerable<Table1> table1 = unitOfWorkDbGlobal.Table1.GetAll().ToList();
IEnumerable<Table2> table2 = unitOfWorkDbGlobal.Table2.GetAll().ToList();

var joinedItems = from t1 in table1
                  join t2 in table2 on t1.TestGuid equals t2.TestGuid
                  select new JoinedTableDto
                  {
                      ColumnA = t1.ColumnA,
                      ColumnB = t1.ColumnB,
                      ColumnC = t2.ColumnC,
                      ColumnD = t2.ColumnD
                  };

// 转换为ObservableCollection并赋值给可观察属性
JoinedTables = new ObservableCollection<JoinedTableDto>(joinedItems);

步骤3:在ViewModel中添加可观察属性

现在可以用JoinedTableDto类型定义符合要求的可观察属性:

using CommunityToolkit.Mvvm.ComponentModel;
using System.Collections.ObjectModel;

public partial class YourViewModel : ObservableObject
{
    [ObservableProperty]
    private ObservableCollection<JoinedTableDto>? _joinedTables;

    // 其他业务逻辑代码...
}

步骤4:确认XAML绑定无需修改

你提供的XAML代码中,列绑定的ColumnA、ColumnB等字段名与JoinedTableDto的属性名完全匹配,因此原XAML可以直接使用,不需要调整。

额外说明

  • 如果后续需要更新数据,直接操作JoinedTables集合(如Add、Remove、Clear),ObservableCollection会自动通知UI刷新;
  • 如果需要重新加载全量数据,直接重新赋值JoinedTables = new ObservableCollection<JoinedTableDto>(新查询结果)即可,[ObservableProperty]会自动触发PropertyChanged事件。

内容的提问来源于stack exchange,提问作者E. A. Bagby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:55:59