将视图注入MainWindow

时间:2015-04-30 17:12:42

标签: c# wpf mvvm

我有以下问题: 我想以最佳实践风格实现MvvM,所以我想在this Microsoft-Video中实现MvvM。该视频需要约1小时,因此我压缩内容:

  • App.xaml.csOnStartup - 事件被覆盖,以便我手动实例化MainWindow。
  • 有一个MainViewModel包含ObservableCollection<ViewModelBase>属性,MainWindow的{​​{1}}绑定到该
  • ItemsControl已在MainViewModel中实例化,App.xaml.cs的{​​{1}}设置为此。
  • MainWindow包含DataContext,其MainWindow.xaml类型并包含DataTemplate

所以,我有几个ViewModelBaseMainView s。但是,当我将多个视图放入View时,只有一个ViewModel已填充值(每次在MainView中放置第一个视图时)。我知道它应该如何工作: 视图全部放在View中,MainView.xaml显示MainView。因为我将MainView的{​​{1}}设置为MainWindowMainWindow的{​​{1}}(DataContext}成功绑定到MainViewModel MainWindow的{​​{1}}集合。 但我从未将特定ItemsControl的{​​{1}}设置为相应的ItemsSource。由于命名约定,Visual Studio是否会自动绑定相应的ViewModelsMainViewModel

但是,只有DataContext中首先放置的View已填充了值。当我在ViewModel - 文件中交换第2个和View个位置时,以前的第2个ViewModel现在可以正常工作,但以前的View不会已经填写了任何值。为什么会这样? 当然,如果你愿意,我可以添加特定的代码。

  

但我从未将特定Views的DataContext设置为相应的ViewModel。由于命名约定,Visual Studio是否会自动绑定相应的Views和ViewModel?

现在我知道,我设置的MainViewView的每个实例替换为我想要实例化的类的实例。 因此,每个XAML将映射到MainView(然后MainView将映射到View),方法是将每个相应的“ViewModel”实例替换为View

一个问题解决了,另一个问题出现了: 我在DataTemplate中的DataType声明了一些样式:

View

当我添加DataTemplates时,我需要:

MainWindow

然后我得到了一个黑屏,以便不应用声明的样式(不是View)。我真的对App.xamlResourceDictionary知之甚少,所以我该如何解决这个问题?

0 个答案:

没有答案