当前位置: 首页 > 编程语言 > C#

绑定多功能WPFDataGridShare

时间:2023-04-11 10:32:41 C#

BindingMulti-functionWPFDataGrid您将如何绑定一个WPF数据网格,它需要显示来自许多不同数据源的数据,这些数据源具有不同列标题和类型的不同列数?我目前正在做的是在我的ViewModel中为我想在此DataGrid中显示的每个不同的记录集合创建自定义List()的数据网格列列表。我遍历此列表以设置DataGrid列:foreach(DataGridColumndgcindgcSample){dgc.HeaderStyle=hStyle;dgMyDataGrid.Columns.Add(dgc);最后,我使用ItemsSource来设置项目的来源:dgMyDataGrid.ItemsSource=SomeCollection;这行得通,但它没有约束力,它违反了MVVM指南,ViewModel应该与特定的UI元素无关,因为它现在必须处理DataGrid并托管DataGridColumn对象的集合......有什么想法吗?您是否考虑过使用http://www.codeproject.com/KB/grid/MultiColumnSetDataGrid.aspx中显示的数据网格派生类这将允许您查看视图中定义的多个列集并在它们之间切换。我认为您必须将DataGrid绑定到数据源,但您的任务是创建此数据源。我将创建一个使用LINQ从不同实体创建数据源的示例。假设您有两个不同的实体:Entity1和Entity2,每个实体都有一个公共ID:classEntity1{publicintID{get;放;}publicstringE1Column{get;放;}}classEntity2{publicintID{get;放;}publicstringE2Column{get;放;您可以像这样在LINQ中使用Join创建数据源:Liste1List=newList();e1List.Add(newEntity1(){ID=1,E1Column="E1a"});e1List.Add(newEntity1(){ID=2,E1Column="E1b"});列表e2List=newList();e2List.Add(newEntity2(){ID=1,E2Column="E2a"});e2List.Add(newEntity2(){ID=2,E2Column="E2b"});varquery=frome1ine1Listjoine2ine2Listone1.IDequalse2.IDselectnew{ID=e1.ID,E1Column=e1.E1Column,E2Column=e2.E2Column};//绑定DataGriddataGrid1.ItemsSource=query.ToList();祝你好运!IMO正确的做法是将所有数据源封装到一个对象中,类似于自定义List()。调用此MultifunctionalSource。这个新对象将包含一个列列表,可能还包含添加新源和聚合它们的方法。可能在添加新源时,您可以自动管理列列表。MultifunctionalSource负责提供可绑定的数据源。该模型将为View提供一个MultifunctionalSource类型的对象。在视图中,您应该有一个从数据网格派生的新控件,它将理解如何显示MultifunctionalSource类型的对象。这个新控件在第一个实例中可能非常简单,因为它可以根据绑定简单地设置其列。MultifunctionalSource应返回它认为与显示相关的列列表。它还应该能够返回完整的列列表,使UI能够根据其他标准确定哪些列是相关的;从而保持边界。以上就是C#学习教程:绑定多功能WPFDataGrid分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: