我有一个名为:
的数组string[,] TableData;
我可以使用绑定将其内容与DataGrid控件链接吗?
如果可能,我希望用户能够编辑网格并反映数组中的更改。
答案 0 :(得分:5)
请参阅此问题:How to populate a WPF grid based on a 2-dimensional array
您可以使用名为DataGrid2D
的{{3}}(this control)。要使用它,只需添加对DataGrid2DLibrary.dll的引用,添加此命名空间
xmlns:dg2d="clr-namespace:DataGrid2DLibrary;assembly=DataGrid2DLibrary"
然后创建一个DataGrid2D并将其绑定到IList,2D数组或1D数组,如下所示
<dg2d:DataGrid2D Name="dataGrid2D"
ItemsSource2D="{Binding Int2DList}"/>
用户将能够编辑数据,DataGrid
中所做的更改将反映在2D数组中
答案 1 :(得分:2)
您无法将矩阵绑定到DataGrid
。但是,根据您要实现的目标,您可以将其转换为class
。
矩阵的内容是什么?你为什么不试试这样的事?
public class MyClass
{
public string A { get; set; }
public string B { get; set; }
public MyClass(string a, string b)
{
Debug.Assert(a != null);
Debug.Assert(b != null);
this.A = a;
this.B = b;
}
}
然后实例化如下内容:
MyClass[] source = { new MyClass("A", "B"), new MyClass("C", "D") };
this.dataGrid.ItemsSource = source;
或者,如果您无法修改源的类型,请尝试使用LINQ进行投影:
var source = (from i in Enumerable.Range(0, matrix.GetLength(0))
select new MyClass(matrix[i, 0], matrix[i, 1])).ToList();
this.dataGrid1.ItemsSource = source;
答案 2 :(得分:1)
最简单的方法应该是在WPF Datagrid中使用构建并将Array投影到将被绑定的View类。
您希望您的用户能够添加行吗?如果是,则无法绑定到数组,因为您无法添加行。
如果您有任意数量的列,则应该能够将数组投影到动态对象,并将datagrid的AutoGenerateColumns属性设置为true。你的专栏有名字吗?