在我的DataGrid中,我有三列,行数是动态的。 DataGrid的值是双数组。如何在不创建新类的情况下将每个数组绑定到其列(我在每个数组上都有propertychangedevent)
<DataGrid Name="dataGrid" HorizontalContentAlignment="Center" VerticalContentAlignment="Stretch"
AutoGenerateColumns="False" Style="{DynamicResource DataGridStyle1}"
CellEditEnding="dataGrid_Kennlinie_CellEditEnding" BeginningEdit="dataGrid_Kennlinie_BeginningEdit"
MaxWidth="500">
<DataGrid.Columns>
<DataGridTextColumn Header="nue" Binding="{Binding nue}" Width="*">
<DataGridTextColumn.Foreground>
<SolidColorBrush Color="Black"/>
</DataGridTextColumn.Foreground>
</DataGridTextColumn>
<DataGridTextColumn Header="mue" Binding="{Binding mue}" Width="*"/>
<DataGridTextColumn Header="tpc[Nm]" Binding="{Binding MPc}" Width="*" />
....end
nue,mue和MPc是另一个类之间的数组。当我做的时候
dataGrid.ItemSource = class.nue;
在这个课程中,我创建了包含我需要的变量的类,它们是:
private double[] _nue;
public double[] nue
{
get { return _nue; }
set
{
if (_nue == value) return;
_nue = value;
OnPropertyChanged("_nue");
}
}
private double[] _mue;
public double[] mue
{
get { return _mue; }
set
{
if (_mue == value) return;
_mue = value;
OnPropertyChanged("_mue");
}
}
private double[] _MPc;
public double[] MPc
{
get { return _MPc; }
set
{
if (_MPc == value) return;
_MPc = value;
OnPropertyChanged("_MPc");
}
}
它为我设置了正确的行数但没有值。
有什么想法吗? 谢谢,新年快乐
答案 0 :(得分:1)
在您的示例中,您只是绑定到一个数组(nue
)。
因此行数是正确的,但没有显示数据。因为nue.nue, nue.mue
等不存在。 (您应该在输出窗口中看到有关缺少的绑定的错误。)
最简单的解决方案是重构您的类,并绑定该类的List,Array或ObervableCollection。
如果你从某个地方获得双数组作为输入:没有办法将这些数据映射到其他结构中,DataGrid默认可以处理。
// simplified
class Container {
public double Nue {get; set;}
public double Mue {get; set;}
public double MPc {get; set;}
}
ObservableCollection<Container> containers = ...
dataGrid.ItemSource = containers;
// This will now update the grid, just like other operations on the ObservableCollection
containers.Add(new Container {
Nue = 13.1,
Mue = 2.23,
MPc = 0.01
});
DataGrid xaml可以保持原样,Bindings现在可以正常工作。