このようなマトリックス型のデータグリッドがあります。
このグリッドはすべて XAML で設計されています
2次元配列を使用してこれらのdatagridcellに値を挿入する方法は? 挿入する必要がある値は、bool
データ型 (TRUE または FALSE) である必要があります。何か案は ?
このようなマトリックス型のデータグリッドがあります。
このグリッドはすべて XAML で設計されています
2次元配列を使用してこれらのdatagridcellに値を挿入する方法は? 挿入する必要がある値は、bool
データ型 (TRUE または FALSE) である必要があります。何か案は ?
grids にバインドできる DataView を作成するコンバーターを使用して、MVVM シナリオに対する私のアプローチを次に示しますItemsSource
。これは double を保持する特別な 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();
}
}
コンバーターのリソースを定義します。
<converter:MatrixToDataViewConverter x:Key="MatrixToDataViewConverter" />
そして、次のように使用します。
<DataGrid ItemsSource="{Binding Matrix, Converter={StaticResource MatrixToDataViewConverter}, ConverterParameter=1}"/>
ただし、双方向バインディングは許可されていません...
編集
配列 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 ItemsSource="{Binding Matrix, Converter={StaticResource BoolArrayToDataViewConverter}}"/>
そして、これは非常に未加工のバージョンでどのように見えるかです. その後、DataGrid のスタイルを設定し、そのテンプレートを編集できますが、これは別の問題です...