我有两个DataGrids,并且在顶部网格OrdersGrid
中选择一行,在底部网格DetailsGrid
中显示有关OrdersGrid
中所选行的一些详细信息
我希望两个网格NewItemPlaceholderPosition
为AtBeginning
。对OrdersGrid
来说这很容易,因为我可以在我的UserControl
子类构造函数中设置它:
((IEditableCollectionView)OrdersGrid.Items).NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning;
但问题是ItemsSource
的{{1}}是DetailsGrid
中当前所选项目的成员。
如果我为OrdersGrid
设置NewItemPlaceholderPosition
,那么它一直有效,直到我点击DetailsGrid
中的新行,直到它回到默认值为OrdersGrid
以来DetailsGrid
1}}从新的ItemsSource
重新加载。
ItemsSource
的{{1}}是名为OrdersGrid
的{{1}},其中包含ObservableCollection
类型的对象和{Orders
Order
对于当前ItemsSource
,1}}是DetailsGrid
,也是Order.Details
。
我认为我想要ObservableCollection
Order
事件,但我不确定这是正确的方法,甚至不知道如何解决这个问题。请帮忙!
答案 0 :(得分:0)
我能够通过将以下内容添加到我的UserControl
子类构造函数来解决此问题:
((IEditableCollectionView)DetailsGrid.Items).NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning;
var dpd = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(DataGrid));
if (dpd != null)
{
dpd.AddValueChanged(DetailsGrid, DetailsSourceChanged);
}
使用DetailsSourceChanged
方法定义如下:
private void DetailsSourceChanged(object sender, EventArgs e)
{
if (DetailsGrid.Items.Count > 0)
{
((IEditableCollectionView)DetailsGrid.Items).NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning;
}
}