【发布时间】:2023-01-29 23:08:43
【问题描述】:
我的数据访问层中有两个模型:Table1 和 Table2。
我想使用 CommunityToolkit 中的 WinUI 3 DataGrid 来显示每个表中的两列:Table1.ColumnA、Table1.ColumnB、Table2.ColumnC、Table2.ColumnD
我的想法是在我的 ViewModel 类中使用 linq 来加入每个模型的可枚举:
IEnumerable<Table1> table1 = unitOfWorkDbGlobal.Table1.GetAll().ToList();
IEnumerable<Table2> table2 = unitOfWorkDbGlobal.Table2.GetAll().ToList();
var JoinedTables = (from t1 in table1
join t2 in table2 on t1.TestGuid equals t2.TestGuid
select new
{ t1.ColumnA, t1.ColumnB,
t2.ColumnC, t2.ColumnD });
这种方法出现的问题是,我可以根据需要使用 table1 或 table2 创建 CommunityToolkit.Mvvm [ObservableProperty],但我无法使用 join 创建可观察属性,因为我使用的是 var 类型。当我使用 JoinedTables.GetType().Name 来确定显式类型时,它返回一个 Enumerable<JoinIterator>d__122 4 类型,这似乎是计算机官宣无法用作属性类型。
[ObservableProperty]
private ObservableCollection<Table1>? _table1Collection; //this works
[ObservableProperty]
private Enumerable<JoinIterator> d__122`4 _joinedTables; //Errors
如何将联接表制作成可以在 XAML 中绑定到 CommunityToolkit DataGrid 的 ObservableProperty。
这是我想使用的 XAML 示例(注意 ViewModel 在代码隐藏中分配为带有我上面添加的代码的类):
<controls:DataGrid x:Name="MyDataGrid"
AutoGenerateColumns="False"
ItemsSource="{x:Bind ViewModel.JoinedTables, Mode=OneWay}">
<controls:DataGrid.Columns>
<controls:DataGridTextColumn
Header="Column A"
Width="250"
Binding="{Binding ColumnA}"
FontSize="14" />
<controls:DataGridTextColumn
Header="Column B"
Width="250"
Binding="{Binding ColumnB}"
FontSize="14" />
<controls:DataGridTextColumn
Header="Column C"
Width="250"
Binding="{Binding ColumnC}"
FontSize="14" />
<controls:DataGridTextColumn
Header="Column D"
Width="250"
Binding="{Binding ColumnD}"
FontSize="14" />
</controls:DataGrid.Columns>
</controls:DataGrid>
【问题讨论】:
标签: c# linq datagrid winui-3 community-toolkit-mvvm