7

単純な MVVM アプローチでは、App.xaml で OnStartup をオーバーライドして、MainWindow を ViewModel にリンクします。

  public partial class App : Application
  {

    protected override void OnStartup(StartupEventArgs e)
    {
      base.OnStartup(e);

      MainWindow window = new MainWindow();
      var viewModel = new MainWindowViewModel();
      window.DataContext = viewModel;
      window.Show();
    }

  }

これにより、WPF アプリケーションを実行すると、MainWindow の 2 つのインスタンスが生成されます。スタートアップをオーバーライドしているので、1つだけになるべきではありませんか?

ウィンドウの 1 つは正しい DataContext (ViewModel) を表示していますが、もう 1 つはそうではありません。

4

1 に答える 1

12

App.xaml で:

<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">

StartupUri を削除します。これにより、2 番目のウィンドウの読み込みが停止します。

于 2012-05-23T13:17:37.360 に答える