WPF/MVVM -视图模型应该保持不变,而只是模型发生变化吗?

oknwwptz  于 2022-12-24  发布在  其他
关注(0)|答案(2)|浏览(170)

我有点怀疑什么是“正确的方式”。
我有一个应用程序,其中包含类似于visual studio的概念,因此我将使用它来解释:
我有一个“解决方案”视图模型和一个背后的模型。视图模型显示在“资源管理器”中。
我可以在“没有加载解决方案"和"加载了解决方案”之间来回切换。
最后我的问题:-):
我应该保留我的视图模型对象并让它反映我加载了一个新的“解决方案对象”吗?还是应该创建一个新的视图模型对象并让视图绑定到新对象?

woobm2wo

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;
    }
};
o8x7eapl

o8x7eapl2#

视图模型的安排是什么?
一般情况
视图模型是actualmodel的本地化版本,只要通过DataBiding更改视图模型,视图就会更新。
在你的例子中,你有两个状态。
1-您的视图已加载
2-未加载您的视图

    • 那么我应该创建一个新的视图模型对象并让视图绑定到新对象吗?**

在我看来,是的

相关问题