我一定是误解了这个概念ViewModels
和意见。但目前我无法从地面重建应用程序,这次做得更好。我的情况是,我有一个视图,用户可以在其中加载文件并读取它们,绘图仪显示图形并实现一些操作。我希望能够生成数据报告(如摘要),但我希望它在其他视图中。我在用着ModernUI http://mui.codeplex.com/,此另一个视图位于另一个选项卡中。
我想要的是同步两个选项卡,当我在“绘图仪选项卡”中加载文件时,该文件也必须在另一个视图中加载。为此,我认为我需要的是将视图绑定到相同的ViewModel
,例如我有LoadedFiles = List<File>
,这样我就能实现它。问题是如果我绑定它
MainViewModel vm = new MainViewModel();
DataContext = vm;
或在 XAML 中
<UserControl.Resources>
<UserControl.DataContext=local:MainViewModel/>
</UserControl.Resources>
我实际上绑定到不同的 MainViewModel,并且数据不再共享。我是否需要 MVVM 库中的一些类(例如 Locator 等)?这怎么能做到呢?将来我可以做什么,以便为每个视图拥有单独的 ViewModel,但数据相同(或不同)?
您可以创建一个具有 LoadedFiles 属性的新类,然后每个唯一的视图模型都可以引用该类。您可以在多个视图模型之间共享具有这些共享属性的一个类。我是将 MVVMLight 的定位器与 Autofac 容器结合使用 http://www.spikie.be/blog/post/2013/04/12/10-things-you-might-have-missed-about-MVVM-Light.aspx将此类注入到我的每个视图模型中(基本上使用控制反转和依赖注入)。
您可以阅读控制反转和依赖注入here http://martinfowler.com/articles/injection.html#InversionOfControl.
一些示例代码-
public MyClass
{
public List<File> LoadedFiles{get; set;}
}
public ViewModelOne
{
public MyClass MyClassInstance {get; set;}
public ViewModelOne(MyClass myclass)
{
MyClassInstance = myclass
}
}
public ViewModelTwo
{
public MyClass MyClassInstance {get; set;}
public ViewModelTwo(MyClass myclass)
{
MyClassInstance = myclass
}
}
你也可以使用MVVMLight 的定位器 https://stackoverflow.com/questions/8075305/need-help-setting-up-mvvm-light-viewmodellocator将每个视图的 DataContext 设置为适当的视图。
<UserControl x:Class="View1"
DataContext="{Binding ViewModel1, Source={StaticResource Locator}}"...>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)