私は 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}" />
...
何らかの理由で、MainWindow が表示されないため、applicationViewModel がインスタンス化されないようです。私は何を間違っていますか?
私もこれを試しました:
アプリ.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=''System.Windows.StaticResourceExtension' の値を指定すると、例外がスローされました。' 行番号「15」と行位置「19」。
Source=PresentationFramework LineNumber=15 LinePosition=19
ctor() in \MainWindow.xaml.cs:line 25 InnerException: Message='applicationViewModel' という名前のリソースが見つかりません。リソース名は大文字と小文字が区別されます。Source=PresentationFramework StackTrace: System.Windows.StaticResourceExtension.ProvideValueInternal(IServiceProvider serviceProvider, Boolean allowDeferredReference) at System.Windows.StaticResourceExtension.ProvideValue(IServiceProvider serviceProvider) at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider) ) 内部例外:
ただし、これを行うと、XAML は正常に動作します。
MainWindow.xaml
<Window.Resources>
<viewModel:ApplicationViewModel x:Key="applicationViewModel" />
しかし、別のウィンドウで見ることができないので、このウィンドウで ApplicationViewModel をインスタンス化したくありません。前もって感謝します。