在第一第二个窗口:这个App和问题是学习的目的打开从主窗口下面的MVVM和松耦合
我在一个新的应用程序和面向我想开一个窗口的问题,当用户单击MainView中的按钮。在过去,我会设计了刚刚创建的新窗口,用这个新的项目中,我试图从对方完全脱钩的所有类显示它
new RelayCommand((x)=>new SecondWindow().Show());
现在的命令。为了达到这个目的,我的应用程序由4个组件(BL,COM,DAL和UI)组成。 和每个WPF应用程序一样,该应用程序以MainWindow.xaml开头。该MainWindow.cs将创建它的MainWindowViewModel的实例:
public ViewModel VM {get; private set;}
public class MainWindow(){
VM = new ViewModel();
InitializeComponent();
}
(这已经违反了松耦合)(?如何使其更好任何提示)
我的最后一次尝试是创建一个实例我我的主窗口
<Window.Resources>
<local:SecondWindow x:Key="sw"/>
</Window.Resources>
内第二个窗口,并把它作为一个CommandParameter我的指挥
CommandParameter="{StaticResource sw}"/>
new RelayCommand((x)=> ((Window)x).Show());
点
该解决方案的工作,但有一个很大的缺点 - 第二个窗口中获取的创建的应用程序启动后,立即 - 也是如此它的ViewModel其开始有些沉重流程(DB连接等)
我听说过一些关于云燕的IoC原则但我真的不知道如何在wpf应用程序中使用它。
所以,如果我理解这一点我不该我的MainView从我的UI项目的其余部分分开,并使用它的视图模型来承载所有其他的ViewModels ?我会试试这个,但乍一看它看起来并不像我想要的解决方案。说实话,我有点困惑,因为在某些点上我不安静肯定在哪个项目(UI,BL,COM等)来存储我的课 - 让我的UI项目需要BL和COM引用。 – C4p741nZ
好吧,我看了一下它,现在我真的很困惑。我有几个虚拟机(让我们假设2)。每个VM都有一个View。在我的MainView中,我定义了如何显示特定的虚拟机(DataTemplate)。但是,在给定的例子中,我没有看到我的第二个窗口中可以如何访问它的虚拟机的属性(绑定)。在这个例子中一个按钮只是绑定到“SaveProductCommand” - 但如何查看知道SaveProductCommand位于ProductsViewModel代替ApplicationViewModel里面? – C4p741nZ