DataGrid和数组之间的双向绑定

时间:2011-03-19 12:41:40

标签: c# wpf arrays datagrid

我有一个名为:

的数组
string[,] TableData;

我可以使用绑定将其内容与DataGrid控件链接吗?

如果可能,我希望用户能够编辑网格并反映数组中的更改。

3 个答案:

答案 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。你的专栏有名字吗?