繁体   English   中英

ItemsSource更改时,DataGrid NewItemPlaceholderPosition丢失

[英]DataGrid NewItemPlaceholderPosition lost when ItemsSource changed

我上面有两个DataGrid,然后在顶部网格OrdersGrid选择一行,在底部网格OrdersGrid中显示一些有关DetailsGrid所选行的OrdersGrid

我想NewItemPlaceholderPositionAtBeginning两个网格。 这对于OrdersGrid很容易,因为我可以在UserControl子类构造函数中进行设置:

((IEditableCollectionView)OrdersGrid.Items).NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning;

但是问题在于DetailsGridItemsSourceDetailsGrid中当前选定项目的OrdersGrid

如果我设置NewItemPlaceholderPositionDetailsGrid如上然后它工作,直到我在一个新行单击OrdersGrid时,它可以追溯到的是在底部的默认,因为DetailsGrid从它的新的重新加载ItemsSource

OrdersGridItemsSource是一个名为OrdersObservableCollection ,其中包含Order类型的对象, DetailsGridItemsSourceOrder.Details ,也是当前OrderObservableCollection

我以为我想要类似DetailsGridItemsSourceChanged事件,但是我不确定这是否是正确的方法,甚至如何解决。 请帮忙!

通过将以下内容添加到我的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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM