使用CollectionChang ed事件时,在ItemCollection上访问ModelParent

时间:2018-01-19 07:47:58

标签: c# wpf datagrid wpfdatagrid

目前,当我向其添加新项目时,我将DataGrid滚动到底部,如下所示:

// responses is an ObservableCollection where I add the content from http responses
responses.Add(content);
// dataGrid.ItemsSource is binded to responses
dataGrid.ScrollIntoView(content);

现在我的想法是将用于将项目添加到事件处理程序的方法中将DataGrid滚动到底部的逻辑移动:

((INotifyCollectionChanged)DataGrid.Items).CollectionChang‌​ed += CollectionChangedEventHandler;

private void CollectionChangedEventHandler(object sender, NotifyCollectionChangedEventArgs e)
{
    var itemCollection = sender as ItemCollection;

    // How to access ModelParent here?
}

如果我调试我的代码,我可以看到itemCollection对象上有属性ModelParent,它似乎是正确的DataGrid。但是,我无法访问它,甚至没有反射:

var dataGrid = itemCollection.GetType().GetProperty("ModelParent").GetValue(itemCollection);

itemCollection.GetType().GetProperty("ModelParent")只返回null。是否可以通过DataGrid从事件处理程序内部访问sender(我有多个DataGrids,我想使用相同的事件处理程序)或者我在这里咆哮错误的树?

1 个答案:

答案 0 :(得分:0)

  

是否可以通过DataGrid从事件处理程序内部访问sender,或者我在这里咆哮错误的树?

没有。 sender参数引用引发ItemCollection事件的ObservableCollection<T>CollectionChanged实例。此集合没有引用绑定到集合的DataGrid控件,并将其显示在UI中。

你需要找到另一种方法来做你想做的事情。尝试访问DataGrid CollectionChanged事件处理程序中的ObservableCollection<T>并不是一个好主意。