Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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# 如何使用MVVM从其他WPF打开WPF应用程序?_C#_Wpf_Mvvm - Fatal编程技术网

C# 如何使用MVVM从其他WPF打开WPF应用程序?

C# 如何使用MVVM从其他WPF打开WPF应用程序?,c#,wpf,mvvm,C#,Wpf,Mvvm,我试图从另一个应用程序中获取演示代码,我刚刚添加了一个按钮,用于调用演示的构造函数: private void FrontendDebug_Click(object sender, RoutedEventArgs e) { Demo.MainWindow mainWindow = new Demo.MainWindow(); mainWindow.Show(); } 问题是它在initializeComponent处引发异常: 我在某个地方读到,在MVVM中,调用Initiali

我试图从另一个应用程序中获取演示代码,我刚刚添加了一个按钮,用于调用演示的构造函数:

private void FrontendDebug_Click(object sender, RoutedEventArgs e)
{
   Demo.MainWindow mainWindow = new Demo.MainWindow();
   mainWindow.Show();
}
问题是它在
initializeComponent
处引发异常:


我在某个地方读到,在MVVM中,调用
InitializeComponent()
之前应该设置
DataContext
,但我不知道这是否是问题所在,或者如果是问题所在,该如何处理。

您得到的错误指出,使用
StaticResource
标记扩展来引用此行中未找到的带有键
Locator
的资源:

DataContext="{Binding Source={StaticResource Locator},Path=ViewModelMainWindow}"
定位器在应用程序资源中定义,因此可以在整个应用程序中访问它。您可能是不小心将其删除了,或者是
App.xaml
中有输入错误。确保它看起来像这样

<Application x:Class="Demo.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" d1p1:Ignorable="d" xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006">
    <Application.Resources>
        <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" xmlns:vm="clr-namespace:Demo.ViewModel" />
    </Application.Resources>
</Application>
因此,演示项目中的
App
对象永远不会创建,其资源也不可用。即使它是自举的,在
App.xaml
中定义的资源也只适用于这个应用程序,其他什么都不适用


因此,
main窗口
实例将尝试在您的应用程序中查找资源,而不是在演示应用程序中。因为这里没有定义它,所以您将得到一个异常。您可以将视图模型定位器添加到应用程序的
App.xaml
资源中,但请记住,它适用于在应用程序级别定义的所有资源。

请显示您的xaml代码。错误指出您使用的
{StaticResource Locator}
无法解析。它位于该文件的第17行,谢谢!这些文件与git repo中的文件相同。我克隆了它,如果我打开它的解决方案,它就会运行。当我试图从另一个WPF应用程序按钮打开它时,单击“仅”,我就遇到了这个问题。很抱歉,你是对的。在转换为.net core之前,我使用的是139f5ed8f7c2f5d107cd8f5913f221e89a967047状态,问题存在。很抱歉,我再次检查了所有内容。如果我只使用其他应用程序中的按钮打开它,则会出现异常。如果我在一个单独的VS窗口中打开.csproj并运行它,它是否可以工作。因为ViewModelLocator仅在解决方案的项目中可用,并且在整个应用程序中应该可以访问它,这是否可能?我怎么能这么做?
Demo.MainWindow mainWindow = new Demo.MainWindow();