我有以下问题: 我想以最佳实践风格实现MvvM,所以我想在this Microsoft-Video中实现MvvM。该视频需要约1小时,因此我压缩内容:
App.xaml.cs
中OnStartup
- 事件被覆盖,以便我手动实例化MainWindow。MainViewModel
包含ObservableCollection<ViewModelBase>
属性,MainWindow
的{{1}}绑定到该ItemsControl
已在MainViewModel
中实例化,App.xaml.cs
的{{1}}设置为此。MainWindow
包含DataContext
,其MainWindow.xaml
类型并包含DataTemplate
所以,我有几个ViewModelBase
和MainView
s。但是,当我将多个视图放入View
时,只有一个ViewModel
已填充值(每次在MainView
中放置第一个视图时)。我知道它应该如何工作:
视图全部放在View
中,MainView.xaml
显示MainView
。因为我将MainView
的{{1}}设置为MainWindow
,MainWindow
的{{1}}(DataContext
}成功绑定到MainViewModel
MainWindow
的{{1}}集合。
但我从未将特定ItemsControl
的{{1}}设置为相应的ItemsSource
。由于命名约定,Visual Studio是否会自动绑定相应的ViewModels
和MainViewModel
?
但是,只有DataContext
中首先放置的View
已填充了值。当我在ViewModel
- 文件中交换第2个和View
个位置时,以前的第2个ViewModel
现在可以正常工作,但以前的View
不会已经填写了任何值。为什么会这样?
当然,如果你愿意,我可以添加特定的代码。
但我从未将特定Views的DataContext设置为相应的ViewModel。由于命名约定,Visual Studio是否会自动绑定相应的Views和ViewModel?
现在我知道,我设置的MainView
将View
的每个实例替换为我想要实例化的类的实例。
因此,每个XAML
将映射到MainView(然后MainView将映射到View
),方法是将每个相应的“ViewModel”实例替换为View
。
一个问题解决了,另一个问题出现了:
我在DataTemplate
中的DataType
声明了一些样式:
View
当我添加DataTemplates时,我需要:
MainWindow
然后我得到了一个黑屏,以便不应用声明的样式(不是View
)。我真的对App.xaml
和ResourceDictionary
知之甚少,所以我该如何解决这个问题?