Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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
WPF:如何在运行时更改行为?_Wpf_Mvvm_Behavior - Fatal编程技术网

WPF:如何在运行时更改行为?

WPF:如何在运行时更改行为?,wpf,mvvm,behavior,Wpf,Mvvm,Behavior,我正在用WPF为逻辑电路模拟器设计UI。我希望我的应用程序支持各种行为,具体取决于当前的操作模式,如选择模式橡胶带选择、组件放置模式、布线模式、交互模式等。我考虑在ViewModel中使用状态模式,并将行为封装在与操作模式对应的状态中 我的问题是在视图中反映这种变化。我想每种模式下订阅不同的鼠标事件选择是鼠标下、鼠标移动、鼠标上;放置是鼠标进入,鼠标移动,鼠标离开。我可以将其封装在通用行为中,然后在运行时以某种方式切换行为吗?我应该使用附加属性吗?或者自定义控件?MVVM是如何做到这一点的?不同

我正在用WPF为逻辑电路模拟器设计UI。我希望我的应用程序支持各种行为,具体取决于当前的操作模式,如选择模式橡胶带选择、组件放置模式、布线模式、交互模式等。我考虑在ViewModel中使用状态模式,并将行为封装在与操作模式对应的状态中


我的问题是在视图中反映这种变化。我想每种模式下订阅不同的鼠标事件选择是鼠标下、鼠标移动、鼠标上;放置是鼠标进入,鼠标移动,鼠标离开。我可以将其封装在通用行为中,然后在运行时以某种方式切换行为吗?我应该使用附加属性吗?或者自定义控件?MVVM是如何做到这一点的?

不同的行为是否仅链接到鼠标事件,而UserControl的XAML总是相同的

如果答案是“是”,则可以在所有场景中实现附加到要管理的所有鼠标事件的单个行为,并将当前场景存储在UserControl的变量中


这样,您的自定义行为可以根据指示当前场景的UserControl变量的值来决定是否调用特定ICommand。

wpf中没有订阅鼠标事件:而是绑定到以下命令:uiElement.MouseLeftButtonDown+=sender,eventArgs=>{/*code*/};可以从behavior或helper类中执行,以使mvvm更强大。我仍然不知道在运行时更改它的最佳方法是什么。不过还是要谢谢你:我已经告诉过你,最好的方法就是命令。大多数时候,这应该可以奏效。另外,如果状态更改与XAML中的更改相关联,您会提出什么建议?在这种情况下,您可以使用一些“DataTemplate”,然后使用“DataTrigger”绑定到指示当前场景的属性在它们之间切换