Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将视图注入主窗口_C#_Wpf_Mvvm - Fatal编程技术网

C# 将视图注入主窗口

C# 将视图注入主窗口,c#,wpf,mvvm,C#,Wpf,Mvvm,我有以下问题: 我想以最佳实践风格实现MvvM,所以我想像中一样实现MvvM。视频需要约1小时,因此我压缩了内容: 在App.xaml.cs中,OnStartup-事件被覆盖,因此我手动实例化了主窗口 有一个MainViewModel包含一个observeCollection属性,main窗口的ItemsControl绑定到该属性 此MainViewModel正在App.xaml.cs中实例化,并且main窗口的DataContext设置为此 main窗口.xaml包含一个类型为ViewMod

我有以下问题: 我想以最佳实践风格实现MvvM,所以我想像中一样实现MvvM。视频需要约1小时,因此我压缩了内容:

  • App.xaml.cs
    中,
    OnStartup
    -事件被覆盖,因此我手动实例化了主窗口
  • 有一个
    MainViewModel
    包含一个
    observeCollection
    属性,
    main窗口的
    ItemsControl
    绑定到该属性
  • MainViewModel
    正在
    App.xaml.cs
    中实例化,并且
    main窗口的
    DataContext
    设置为此
  • main窗口.xaml
    包含一个类型为
    ViewModelBase
    DataTemplate
    ,并包含一个
    MainView
因此,我有几个
View
s和
ViewModel
s。但是,当我在
MainView
中放置多个视图时,只有一个
视图
填充了值(每次都是视图,它位于
MainView.xaml
的第一位)。我知道它应该如何工作: 所有视图都放置在
MainView
中,
MainView
显示在
main窗口中。由于我将
main窗口的
DataContext
设置为
MainViewModel
,因此
main窗口的
ItemsControl
(它是
ItemsSource
)成功绑定到
MainViewModel
ViewModels
集合。 但我从未将特定
视图的
DataContext
设置为相应的
ViewModel
。Visual Studio是否根据命名约定自动绑定相应的
视图
s和
视图模型
s

但是,只有首先放置在
主视图中的
视图
,才填充了值。当我交换2号和1号的时候
View
s在
XAML
-文件中,以前的第二个
View
现在可以工作,但以前的第1个
可以工作<代码>视图
不再填充任何值。为什么会这样? 当然,如果你愿意,我可以添加特定的代码


但我从未将特定视图的DataContext设置为其相应的ViewModel。Visual Studio是否根据命名约定自动绑定相应的视图和视图模型

现在我知道,我设置的
DataTemplate
DataType
的每个实例替换为我想要实例化的类的一个实例。 因此,每个
视图
都将映射到主视图(然后主视图将映射到
main窗口
),方法是将每个相应的“视图模型”实例替换为其
视图


一个问题解决,另一个问题弹出: 我在
资源字典中的
App.xaml
中声明了一些样式:

  <Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Orange.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

当我添加所需的数据模板时:

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:OperationViewModel}" x:Key="OpKey">
        <v:OperationView/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:PlayerViewModel}" x:Key="PKey">
        <v:PlayerView/>
    </DataTemplate>
        <ResourceDictionary x:Key="MetroStyle">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Orange.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>


但是我得到了一种黑屏,这样声明的样式(不是
DataTemplate
)就不会被应用。我对
ResourceDictionary
s和
App.Xaml
真的不太了解,所以我怎么解决这个问题呢?

你能发布一些代码吗..谢谢你想帮我,但我发现了我的错误。我很快会给你回复的