0

私は 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 をインスタンス化したくありません。前もって感謝します。

4

1 に答える 1

2

を変更してみて{StaticResource XXX}ください{DynamicResource XXX}

于 2012-11-09T20:22:36.983 に答える