我知道......这个问题被问了很多......但总是有相同的答案“把你的逻辑放在视图模型中”。
但是在这个例子中我必须将逻辑放在视图中,因为每次其中一个数据网格的行数发生变化时,我必须在视图中测量每个数据网格的大小。问题是...在我的viewmodel中我无法访问datagrid,所以我无法测量任何东西。在我看来,我无法得到行数已经改变的回复。
有人知道我在视图中知道在数据网格中添加或删除了一行吗? 它是一个带有customtemplate btw的自定义数据网格。也许这会以某种方式提供帮助?
答案 0 :(得分:0)
ObservableCollection
绑定了DataGrid
,对吧?并且您有ViewModel
(其中包含ObservableCollection
)作为DataContext
的{{1}}。您可以在视图中订阅View
的{{1}}事件(您可以从视图中访问ViewModel,因为它是CollectionChanged
)。
E.g。
ObservableCollection
它略微违反了MVVM。如果这是一个完全自定义的控件,那么您已经收到View.DataContext
中的事件(因为您需要更新UI),因此您可以在那里处理。
我能想到的另一种方法是使用某种(this.DataContext as ViewModel).YourCollection
.CollectionChanged += (s, e) => { /* logic */ };
模式,例如MVVMLight中的ObservableCollection
。