子 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;
}
}
我有 类 像这样的:(抱歉冗长的问题)
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;
}
}