我是 WPF 和 MVVM 的新手,但我正在尝试为我的应用程序中的多个窗口创建一个应用程序级视图模型。这是我的代码:
ApplicationViewModel.cs:
public class ApplicationViewModel : ViewModelBase
{
// for MainWindow
private MainWindowViewModel mainWindowViewModel;
public MainWindowViewModel MainWindowViewModel
{
get { return this.mainWindowViewModel; }
private set
{
this.mainWindowViewModel = value;
OnPropertyChanged("MainWindowViewModel");
}
}
// other window code...
public ApplicationViewModel()
{
this.mainWindowViewModel = new MainWindowViewModel();
// Now show the MainWindow
MainWindow mainWindow = new MainWindow();
mainWindow.Show();
}
}
应用程序.xaml:
<Application x:Class="SomeApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModel="clr-namespace:SomeApp.viewModel">
<Application.Resources>
<viewModel:ApplicationViewModel x:Key="applicationViewModel" />
...
MainWindow.xaml:
<Window x:Class="SomeApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModel="clr-namespace:SomeApp.viewModel">
<Grid DataContext="{StaticResource applicationViewModel}">
<TextBox Name="courseNameTxtBox" Width="200" MaxLength="251"
Text="{Binding Path=MainWindowViewModel.SomeMainWindowObject,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}" />
...
由于某种原因,似乎从来没有实例化 applicationViewModel 因为 MainWindow 从来没有显示。我究竟做错了什么?
我也试过这个:
应用程序.xaml:
<Application x:Class="CourseAttendanceTracking.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup">
...
应用程序.xaml.cs:
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
this.Resources.Add("applicationViewModel", new ApplicationViewModel());
}
}
我得到这个错误:
System.Windows.Markup.XamlParseException 发生 Message='Provide value on 'System.Windows.StaticResourceExtension' 引发异常。' 行号“15”和行位置“19”。
源=PresentationFramework LineNumber=15 LinePosition=19
\MainWindow.xaml.cs 中的 ctor():第 25 行 InnerException:消息=找不到名为“applicationViewModel”的资源。资源名称区分大小写。Source=PresentationFramework StackTrace:在 System.Windows.StaticResourceExtension.ProvideValue(IServiceProvider serviceProvider) 在 MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider) 的 System.Windows.StaticResourceExtension.ProvideValueInternal(IServiceProvider serviceProvider, Boolean allowDeferredReference) ) 内部异常:
如果我这样做,我的 XAML 工作正常:
MainWindow.xaml
<Window.Resources>
<viewModel:ApplicationViewModel x:Key="applicationViewModel" />
但我真的不想在这个窗口中实例化 ApplicationViewModel,因为我无法在另一个窗口中看到它。提前致谢。