0

このスレッドで説明されているように、OnStartupをオーバーライドしたい

WPFコマンドライン

ここで、XamlParseExceptionをスローするMVVM Light Toolkitを使用しているという問題があります。これは、この点で「ロケーター」が不明であることを示しています。

DataContext="{Binding Main, Source={StaticResource Locator}}

設計時間は問題ありません

App.xaml

<Application.Resources>
    <!--Global View Model Locator-->
    <vm:ViewModelLocator x:Key="Locator"
                         d:IsDataSource="True" />
</Application.Resources>

私のオーバーライド

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

    if (e.Args.Length > 0 && e.Args[0] == "\\start")
    {
        /* do stuff without a GUI */
        MessageBox.Show("Start");
    }
    else
    {
        MainWindow mainWindow = new MainWindow(); // <-- Exception
        ViewModelLocator locator = new ViewModelLocator();

        mainWindow.DataContext = locator.Main;
        mainWindow.ShowDialog();
    }
    this.Shutdown();
}

コマンドラインをMVVMLightToolkitと組み合わせて使用​​するにはどうすればよいですか?

更新13.02.201310:10

このオーバーライドにより、例外はなくなりました。しかし、xamlで既に宣言されているのに、なぜViewModelLocatorをリソースに追加する必要があるのでしょうか。

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

    if (e.Args.Length > 0 && e.Args[0] == "\\start")
    {
        /* do stuff without a GUI */
        MessageBox.Show("Start");
    }
    else
    {
        ViewModelLocator locator = new ViewModelLocator();
        Resources.Add("Locator", locator);
        MainWindow mainWindow = new MainWindow();

        //DataContext="{Binding Main, Source={StaticResource Locator}}"
        //mainWindow.DataContext = locator.Main;
        
        mainWindow.ShowDialog();
    }
    this.Shutdown();
}
4

1 に答える 1

0

リソースに既にロケーターが含まれているかどうかを確認する必要があります

ViewModelLocator locator;
if (!Resources.Contains("Locator"))
{
    locator = new ViewModelLocator();
    Resources.Add("Locator", locator);
}
else
{
    locator = (ViewModelLocator) Resources["Locator"];
}

WorkingWindow mainWindow = new WorkingWindow();
mainWindow.ShowDialog();
于 2013-03-20T12:09:38.277 に答える