将矩阵数组绑定到WPF DataGrid [英] Binding matrix arrays to WPF DataGrid
本文介绍了将矩阵数组绑定到WPF DataGrid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有3个这样的字符串数组:
I have 3 string arrays like this:
public string[] RowHeaders
{
get { return new[] {"RowHeader1", "RowHeader2", "RowHeader3", "RowHeader4"};
}
public string[] ColumnHeaders
{
get { return new[] {"ColumnHeader1", "ColumnHeader2", "ColumnHeader3"}; }
}
public string[][] Values
{
get { return new[]
{
new []{"Value11", "Value12", "Value13"},
new []{"Value21", "Value22", "Value23"},
new []{"Value31", "Value32", "Value33"},
new []{"Value41", "Value42", "Value43"},
}; }
}
直到运行时数组大小都是未知的(代码段中的数组值是显示概念)。我想从它们创建
Array sizes are unknown until run-time (array values in code snippet are for showing the concept). I want to create a WPF grid from them like
绑定到这三个数组,并且完全在XAML中设计(如果可能)。
which binds to these 3 arrays and designed entirely in XAML(if possible). How?
推荐答案
这里是使用DataTable和MultipleBinding的解决方案,xaml中的
将三个数组传递给IMultivaluesConverter:
here a solution using DataTable and MultipleBinding, in the xaml pass the three arrays to an IMultivaluesConverter:
<Grid>
<DataGrid>
<DataGrid.ItemsSource>
<MultiBinding Converter="{StaticResource MatrixToDataViewConverter}">
<Binding Path="ColumnHeaders"/>
<Binding Path="RowHeaders"/>
<Binding Path="Values"/>
</MultiBinding>
</DataGrid.ItemsSource>
</DataGrid>
</Grid>
然后在转换器中管理这些数组以创建将绑定到网格ItemSource的DataView: / p>
then in the converter manage those arrays to create a DataView that will be bond to the Grid ItemSource :
public class MatrixToDataViewConverter:IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var myDataTable = new DataTable();
var colums = values[0] as string[];
var rows = values[1] as string[];
var vals = values[2] as string[][];
myDataTable.Columns.Add("---"); //The blanc corner column
foreach (var value in colums)
{
myDataTable.Columns.Add(value);
}
int index = 0;
foreach (string row in rows)
{
var tmp = new string[1 + vals[index].Count()];
vals[index].CopyTo(tmp, 1);
tmp[0] = row;
myDataTable.Rows.Add(tmp);
index++;
}
return myDataTable.DefaultView;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
输出:
这篇关于将矩阵数组绑定到WPF DataGrid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文