子 window 中的 WPF DataGrid 未以某种方式进行数据绑定

WPF DataGrid in the child window is not getting data-bound somehow

我有 类 像这样的:(抱歉冗长的问题)

public class BaselineEntity
{
    public List<RecComparisionData> ComparisionData { get; set; }
}

public class RecComparisionData
{
    public string FieldCaption { get; set; }
    public string ColumnValue { get; set; }
    public string BaselineValue { get; set; }

    public string Flag 
    {
        get 
        { 
            return ColumnValue == BaselineValue ? "same" : "different";
        }
    }
}

我从 Main window 实例化并调用新 window 的 showDialog。 这是主要 window 中我执行此操作的代码。

private void compareBtnClicked(object sender, RoutedEventArgs e)
{
    _enty_toCompare = new BaselineEntity
                      {
                         ComparisionData = new List<RecComparisionData>();
                      };

    var bla = new RecComparisionData
              {
                  FieldCaption = "Yada yada 1",
                  ColumnValue = "123", 
                  BaselineValue = "234"
              }
    _enty_toCompare.ComparisionData.Add(bla);

    // add a few more such blas..

    // instantiating and opening a new window as a ddialog
    RecComparer compWindow = new RecComparer(_enty_toCompare);
    compWindow.ShowDialog();
}

后面的RecComparer代码是这样的:

public partial class RecComparer : Window
{
    private BaselineEntity _blEnty;
    private List<RecComparisionData> _compData;

    public RecComparer(BaselineEntity blEnty)
    {
        InitializeComponent();
        _blEnty = blEnty;

        _compData = blEnty.ComparisionData;

        // this is a datagrid, whose xaml is cited below
        ComparisionDataGrid.ItemsSource = _compData;
    }
}

RecComparer window 有一个 DataGrid 的 XAML 是这样的:

<DataGrid Name="ComparisionDataGrid" 
              ItemsSource="{Binding _compData, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Field" Binding="{Binding FieldCaption}"></DataGridTextColumn>
        <DataGridTextColumn Header="Value" Binding="{Binding ColumnValue}"></DataGridTextColumn>
        <DataGridTextColumn Header="Baseline Value" Binding="{Binding BaselineValue}"></DataGridTextColumn>
        <DataGridTextColumn Header="Flag" Binding="{Binding Flag}"></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

我在调试时可以在 _compData 中看到数据,但在 DataGrid 中什么也没有显示。不知何故绑定没有发生(不再发生!!)..我不得不post这个冗长的问题,因为我找了几个小时后找不到任何帮助..:(

如有任何建议或帮助,我们将不胜感激。

谢谢!

将 RecComparer 中的“_compData”设为 public。将其更改为 属性

public List<RecComparisionData> CompData{get;set;}

数据绑定适用于 Public 个属性。

据我了解,这里的 DataContext 看起来像是 null。您还必须确保您的属性 public 以便它们可以被绑定。 (私有属性不能数据绑定)。我还建议将您的属性重命名为更多 publicy :).

因为它的 DataBound 你不需要在后面的代码中设置 ItemsSource。

试试这个:

public partial class RecComparer : Window
{
    public BaselineEntity _blEnty{get;set}
    public List<RecComparisionData> _compData {get;set}

    public RecComparer(BaselineEntity blEnty)
    {
        InitializeComponent();
        DataContext = this;

        _blEnty = blEnty;

        _compData = blEnty.ComparisionData;

        // this is a datagrid, whose xaml is cited below

        //ComparisionDataGrid.ItemsSource = _compData;
    }
}