我正在尝试为我的行和列分别创建一个包含 rows 和 columns 标题的矩阵。当我在 columns 中有两个相同的值时,我收到错误。但是,当我在行中有两个相同的值时,它会起作用。为什么呢?
错误:
PresentationFramework.dll中出现'System.Windows.Markup.XamlParseException'类型的第一次机会异常 附加信息:'Set property'System.Windows.Controls.ItemsControl.ItemsSource'抛出异常。'行号“15”和行位置“48”。
我的xaml:
<Window.Resources>
<app:MatrixToDataViewConverter x:Key="MatrixToDataViewConverter"/>
</Window.Resources>
<Grid>
<DataGrid>
<DataGrid.ItemsSource>
<MultiBinding Converter="{StaticResource MatrixToDataViewConverter}">
<Binding Path="ColumnHeaders" ElementName="Result"/>
<Binding Path="RowHeaders" ElementName="Result"/>
<!--<Binding Path="Values"/>-->
</MultiBinding>
</DataGrid.ItemsSource>
</DataGrid>
</Grid>
我的cs代码:
public partial class PopUp : Window
{
public string[] RowHeaders { get; set; }
public string[] ColumnHeaders { get; set; }
public ResultPopUp(Array[] Result, List<int> Vb1, List<int> Vb)
{
RowHeaders = new string[Vb.Count];
for (int i = 0; i < Vb.Count; i++)
{
RowHeaders[i] = Vb[i];
}
ColumnHeaders = new string[Vb1.Count];
for (int j = 0; j < Vb1.Count; j++)
{
ColumnHeaders[j] = Vb[j];
}
try
{
InitializeComponent();
}
catch(Exception ex)
{
}
}
}
public class MatrixToDataViewConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var myDataTable = new DataTable();
string[] columns = values[0] as string[];
string[] rows = values[1] as string[];
myDataTable.Columns.Add("---"); //Upper left corner
foreach (string value in columns)
{
myDataTable.Columns.Add(value); // this is where the error occurs when trying to add the second value if it is the same as the first one.
}
foreach (string value in rows)
{
myDataTable.Rows.Add(value);
}
return myDataTable.DefaultView;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
答案 0 :(得分:0)
我认为错误就在这里:
public string[] RowHeaders { get; set; }
public string[] ColumnHeaders { get; set; }
如果不在ResultPopUp的构造函数中创建数组,则RowHeaders和ColumnHeaders将为null。
答案 1 :(得分:0)
因为你的列名列相同。
所以将代码更改为
myDataTable.Columns.Add();
//Creates an unique column name thats not duplicated.
myDataTable.Columns[myDataTable.Columns.Count-1][0] = value[0];
这会创建列并通过寻址将值放入单元格中。 希望它有所帮助。