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();