我有点怀疑什么是“正确的方式”。我有一个应用程序,其中包含类似于visual studio的概念,因此我将使用它来解释:我有一个“解决方案”视图模型和一个背后的模型。视图模型显示在“资源管理器”中。我可以在“没有加载解决方案"和"加载了解决方案”之间来回切换。最后我的问题:-):我应该保留我的视图模型对象并让它反映我加载了一个新的“解决方案对象”吗?还是应该创建一个新的视图模型对象并让视图绑定到新对象?
woobm2wo1#
您的视图模型包含与UI关联的任何数据的状态,该UI在模型中不是 * 更靠后 *。我回答类似你的问题的一种方法是考虑我想要UI中的什么行为,以及什么需要绑定到一些状态信息。或者,换句话说,任何时候我想写一些代码来显示或隐藏UI元素,考虑如何将其Map到布尔变量。因此,选择只有在加载Model时才可见的大块UI,这些UI可能将其可见性绑定到Viewmodel IsSolutionLoaded中的布尔属性。如果你想在处理过程中禁用一些东西,你可以使用一个属性IsCompiling。我已经使用了这个方法和一个属性NotRunningthreadedProcessing,如下所示,当同步对象存在于视图模型中时,它允许我禁用控件。
CNTL_WhiteLevel.SetBinding(ProgressBar.IsEnabledProperty, new Binding("NotRunningThreadedProcessing")); // and the C++/CLI property concerned property bool NotRunningThreadedProcessing { bool get() { return mThreadedCommandSyncher == nullptr; } };
o8x7eapl2#
视图模型的安排是什么?一般情况视图模型是actualmodel的本地化版本,只要通过DataBiding更改视图模型,视图就会更新。在你的例子中,你有两个状态。1-您的视图已加载2-未加载您的视图
在我看来,是的
2条答案
按热度按时间woobm2wo1#
您的视图模型包含与UI关联的任何数据的状态,该UI在模型中不是 * 更靠后 *。
我回答类似你的问题的一种方法是考虑我想要UI中的什么行为,以及什么需要绑定到一些状态信息。或者,换句话说,任何时候我想写一些代码来显示或隐藏UI元素,考虑如何将其Map到布尔变量。
因此,选择只有在加载Model时才可见的大块UI,这些UI可能将其可见性绑定到Viewmodel IsSolutionLoaded中的布尔属性。
如果你想在处理过程中禁用一些东西,你可以使用一个属性IsCompiling。我已经使用了这个方法和一个属性NotRunningthreadedProcessing,如下所示,当同步对象存在于视图模型中时,它允许我禁用控件。
o8x7eapl2#
视图模型的安排是什么?
一般情况
视图模型是actualmodel的本地化版本,只要通过DataBiding更改视图模型,视图就会更新。
在你的例子中,你有两个状态。
1-您的视图已加载
2-未加载您的视图
在我看来,是的