Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGrid行添加事件_C#_Wpf_Mvvm_View_Datagrid - Fatal编程技术网

C# DataGrid行添加事件

C# DataGrid行添加事件,c#,wpf,mvvm,view,datagrid,C#,Wpf,Mvvm,View,Datagrid,我知道。。。这个问题被问了很多。。。但总是用同样的答案“把你的逻辑放在视图模型中” 但在本例中,我必须将逻辑放在视图中,因为每当其中一个数据网格的行数发生变化时,我必须测量视图中每个数据网格的大小。问题是。。。在我的viewmodel中,我没有访问datagrid的权限,因此我无法测量任何东西。在我看来,我无法得到行数已经改变的响应 有人知道我是如何在视图中知道在datagrid中添加或删除了一行的? 这是一个带有自定义模板的自定义数据网格。也许这会有所帮助?您有一个绑定到数据网格的可观察集合,

我知道。。。这个问题被问了很多。。。但总是用同样的答案“把你的逻辑放在视图模型中”

但在本例中,我必须将逻辑放在视图中,因为每当其中一个数据网格的行数发生变化时,我必须测量视图中每个数据网格的大小。问题是。。。在我的viewmodel中,我没有访问datagrid的权限,因此我无法测量任何东西。在我看来,我无法得到行数已经改变的响应

有人知道我是如何在视图中知道在datagrid中添加或删除了一行的?
这是一个带有自定义模板的自定义数据网格。也许这会有所帮助?

您有一个绑定到
数据网格的
可观察集合
,对吗?您有一个
ViewModel
(其中包含
observedcollection
)作为
视图的
DataContext
。您可以在视图中订阅
ObservableCollection
CollectionChanged
事件(您可以从视图访问ViewModel,因为它是
视图。DataContext

例如

它稍微违反了MVVM。如果这是一个完全自定义的控件,那么您已经从
ObservableCollection
接收到事件(因为您需要更新UI),因此您可以在那里处理它


我能想到的另一种方法是使用某种中介模式,例如MVVMLight中的Messenger。。。但我想这不是真的MVVM吗?因为视图依赖于此viewmodel的ecplicit。没办法避免吗?我是说。。。datagrid本身必须知道是否有一行添加到它。。。还是我错了?看我的编辑。顺便说一句,在MVVM中,视图了解ViewModel,因为它已经依赖于它的属性,所以不能在任何ViewModel中进行交换。根据给定的信息,我想到了这些选项,但您可能还有几个,但我看不到代码。
(this.DataContext as ViewModel).YourCollection
    .CollectionChanged += (s, e) => { /* logic */ };