如何将2D数组bool 绑定到WPF DataGrid(单向)?

我有这样的矩阵类数据网格。

在此处输入图像描述

这个网格完全是用XAML设计的

现在如何使用二维数组将值插入到这些datagridcell中? 需要插入的值必须是bool数据类型(TRUE或FALSE)。 有任何想法吗 ?

这是我对MVVM场景的方法,使用转换器创建一个可以绑定到网格ItemsSource的DataView。 这是一个特殊的Matrix数据类型,它包含双精度数,但您可以根据自己的要求自行修改它:

 public class MatrixToDataViewConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var array = value as Matrix; if (array == null) return null; //var array = ILMath.rand(3, 5); var rows = array.Dimensions[0]; var columns = array.Dimensions[1]; var t = new DataTable(); for (var c = 0; c < columns; c++) { t.Columns.Add(new DataColumn(c.ToString())); } for (var r = 0; r < rows; r++) { var newRow = t.NewRow(); for (var c = 0; c < columns; c++) { var v = array[r, c]; // Round if parameter is set if (parameter != null) { int digits; if (int.TryParse(parameter.ToString(), out digits)) v = Math.Round(v, digits); } newRow[c] = v; } t.Rows.Add(newRow); } return t.DefaultView; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

为转换器定义资源:

  

并像这样使用它:

  

它不允许双向绑定,但......

编辑

这是数组bool [] []的版本:

 public class BoolArrayToDataViewConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var array = value as bool[,]; if (array == null) return null; var rows = array.GetLength(0); if (rows == 0) return null; var columns = array.GetLength(1); if (columns == 0) return null; var t = new DataTable(); // Add columns with name "0", "1", "2", ... for (var c = 0; c < columns; c++) { t.Columns.Add(new DataColumn(c.ToString())); } // Add data to DataTable for (var r = 0; r < rows; r++) { var newRow = t.NewRow(); for (var c = 0; c < columns; c++) { newRow[c] = array[r, c]; } t.Rows.Add(newRow); } return t.DefaultView; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

和用法:

  

这就是它在原始版本中的样子。 然后,您可以设置DataGrid的样式并编辑它的模板,但这是另一个问题......

UI