【发布时间】:2019-05-10 17:33:10
【问题描述】:
我已经使用 MVVM Light 启动了一个项目,并且遇到了一个问题,即一旦创建了一个窗口,就会绑定一个 ViewModel,但是,如果我关闭此窗口并重新打开同一个窗口,则会创建另一个视图模型。
通过调试器,我可以看到代码在与表单交互后循环通过属性和方法。我可以看到许多相同集合/属性/方法的实例被触发。这会在删除项目等之后产生“超出范围”的错误。
*注意:使用 ViewModelLocator,绑定在 XAML 中并从 XAML.cs 文件中完全删除。 ViewModel 没有在其他任何地方引用。
我尝试了以下方法。没有帮助。
(WPF/MVVM) Single Instance In MainViewModel
我应该如何处理以消除多个 ViewModel 和循环属性/方法。方法/属性只能循环一次。
编辑
我已经解决了我的问题。通过在 Windows 资源中引用静态类,我为每个 ListView 创建了一个新实例。从而迫使 ViewModel 循环到满足这些实例的条件,每个表单都使用了一个实例。
通过消除资源并将所有数据移动到 MVVM Light DataService 并使用 System.Threading.Tasks 中的任务,我能够绑定到 ViewModel 中的集合而不是独立实例。不再循环。感谢您的回答。
【问题讨论】:
-
一种选择是使用以视图模型为中心的设计。如果您只想要一个实例,请不要创建两个。一切都简单得多。
-
可以使用MVVMLight自带的SimpleIOC。用法在这里回答stackoverflow.com/questions/13795596/…