DataGrid - 将双数组绑定到列

时间:2015-12-31 15:11:16

标签: c# arrays wpf binding datagrid

在我的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");
        }
    }

它为我设置了正确的行数但没有值。

有什么想法吗? 谢谢,新年快乐

1 个答案:

答案 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现在可以正常工作。