我有一个复杂的应用程序,我试图使用MVVM(我不熟悉的模式)开发 - 应用程序有标签和停靠窗口,每个窗口都有“选定对象”的概念,以及全局工具栏在应用程序的顶部,对其执行操作,需要对“选定对象”执行操作。
想象一下与Visual Studio类似的稍微复杂的版本,例如:
暂时忽略多项选择等复杂问题,目前我通过创建一个代表“应用程序”本身的无所不包的单例*模型类来实现这一点,例如
class MyAppModel : INotifyPropertyChanged
{
public ISelectableObject SelectedObject { get; }
}
然后,我有“系统”(我承认我在这里掩盖了很多细节),以确保在UI中的更改导致更改时更新此属性(并触发相关事件)全局“当前选定的对象”,工具栏按钮使用此属性来确定可用性等...
但是我对这个看起来不像MVVM的事实感到困惑(我在某处看到UI状态应该存储在ViewModel中?)
(*)可以使用依赖注入轻松提供
答案 0 :(得分:0)
MVVM
你绝对应该拥有一个代表ViewModel
顶级绑定表面的主Views
。主人ViewModel
会有一个'SelectedItem'
参与INotifyPropertyChanged
的{{1}}通知的属性。然后,您应该将相关的ItemsControl(ViewModel
等)TabControl
绑定到此SeledctedItem
属性,然后您的应用的其他部分可以绑定到ViewModels ViewModel
属性,绑定将自动更改。
答案 1 :(得分:0)
尝试注册Inputmanager.current的PreNotifyInput事件。并在应用程序级别将此事件注册到全局级别。
InputManager.Current.PreNotifyInput += new NotifyInputEventHandler(Current_PreNotifyInput);
也指Inputmanager类