好的,这对我来说有点难以解释,所以我使用带有 WPF 的 MVVM 模型编写了一个程序。
我的主 UserControl 上有一个网格,它需要通过代码动态更新子项(通过更新我的意思是创建和销毁)(因为数据由 ViewModel 更改,我希望根据需要创建和销毁 Grid 的子项) .
我很确定您不能仅使用 XAML 动态创建和销毁 UIElement,因此我的视图中有更新函数(这些更新函数仅更新 UI 本身,它们不会更改 ViewModel 中的任何内容,因此我不会破坏 MVVM,因为代码在视图仅根据 ViewModel 中的数据更改 UI,这样可以吗?)。
现在我在 View 中分配 ViewModel 的 PropertyChanged 事件,并通过代码捕获它并触发 Update 事件,所以我的 View 类中的事件如下所示:
private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "BoardWidth" || e.PropertyName == "BoardHeight")
RecreateBoard();
if (e.PropertyName == "Coordinates")
UpdateCoordinates();
if (e.PropertyName == "TilesOnly")
{
UpdateBoardBlocks();
UpdateTiles();
}
if (e.PropertyName == "BoardBlockViewModels")
UpdateBoardBlocks();
if (e.PropertyName == "TileViewModels")
UpdateTiles();
if (e.PropertyName == "EntryPoint" | e.PropertyName == "CursorViewModel")
UpdateEntryPoint();
}
更新事件使用基于 ViewModel 中数据的代码在视图的主网格中创建/销毁子项。当前的实现效果很好。
但是,我想通过 XAML 实现事件处理程序。所以我的问题是如何在 XAML 中实现上面的事件处理程序代码,当数据上下文属性更改时,我无法找到在视图中执行方法的任何方式。我研究了 DataTriggers 但它们不包含执行方法的能力。此外,DataTrigger 需要在属性更改时触发,而不是在将其设置为特定值时触发。
我不希望通过 ViewModel 推送更新,因为这完全是一个 View 事物,它与 viewmodel 本身无关。例如。在这些情况下,视图的不同实现可能不需要更新。即使我要通过 ViewModel 来推动它,视图本身仍然存在如何执行方法的相同问题。
谢谢您的帮助。