2011-12-08 45 views
1

私はWPFとXAMLを初めて探求していますが、私はまだ理解していない部分がたくさんあります。私は自分のプロジェクトを作成しましたhttp://www.codeproject.com/KB/WPF/AvalonDockMVVM.aspxCommandBindingを解決できません

、およびAvalonDockMVVMから、それにコードを追加しようとしています:

私はこれを通じて働いています。

現在、メニューを作成しようとしています。 MainWindow.xamlで

、私が追加しました:

<Window.Resources> 
    <RoutedUICommand x:Key="Commands.Exit" /> 
</Window.Resources> 

<Window.CommandBindings> 
    <CommandBinding Command="{StaticResource Commands.Exit}" Executed="Exit_Executed" /> 
</Window.CommandBindings> 

<DockPanel> 
    <Menu DockPanel.Dock="Top"> 
     <MenuItem Header="_File"> 
      <MenuItem Header="_Exit" Command="{StaticResource Commands.Exit}" /> 
     </MenuItem> 
    </Menu> 
    ... 
</DockPanel> 

アイデアは、単一の「終了」オプションを使用してメニューを構築することです。

今私が言ったように、私は何をしているのかほとんど分かりません。しかし、<RoutedUICommand>がコマンドを作成しているように見えます。<CommandBinding>は、コードビハインドのExitExecuted()メソッドにバインドしています。<MenuItem>は、そのメニュー項目を選択すると、そのコマンドに束縛されるものは何でも。

AvalonDockMVVMプロジェクトですべて正常に動作します。私の場合、{StaticResource Commands.Exit}でエラーを賭けています:リソースCommands.Exitを解決できませんでした。

これは、XAMLの<RoutedUICommand>要素のほかに、Commands.Exitを定義するコードまたは構成のどこかにあると思います。しかし、私の人生のために、私はそれを見つけることができません。

メソッドをメニューにバインドするには、コマンドでバインドする必要がありますか?

+0

もっとコードを追加しました。正確には、MainWindowViewModelを追加しました。そして今、これは解決します。これは今までどおり私を困惑させてしまいます。ビューモデルには、終了とは何の関係もないものはありません。 –

答えて

0

上記の例を新しいWPFプロジェクトにそのままコピーしました。省略記号を削除し、exitコマンドを処理するためにコードの中にメソッドを追加するだけです。それは正常に動作し、コマンドを解決するのに問題はありませんでした。ここに私の完全で完全なXAMLがあります

<Window x:Class="WPFTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <RoutedUICommand x:Key="Commands.Exit" /> 
    </Window.Resources> 

    <Window.CommandBindings> 
     <CommandBinding Command="{StaticResource Commands.Exit}" Executed="Exit_Executed" /> 
    </Window.CommandBindings> 
    <DockPanel> 
     <Menu DockPanel.Dock="Top"> 
      <MenuItem Header="_File"> 
       <MenuItem Header="_Exit" Command="{StaticResource Commands.Exit}" /> 
      </MenuItem> 
     </Menu> 
    </DockPanel> 
</Window> 

リソースの解決には2つの場所があります。最初に、プロジェクトレベルの静的リソースが "Commands.Exit"キーで定義されているかどうか(またはページの下にある別のリソース)を確認します。次に、<RoutedUICommand>または<Window.Resources>のコードがクローズされていないタグを持っているかどうかを確認します。そのが解析エラーをスローしますが、はおそらくではありませんか?

0

tryを削除してください。リソースキーの使用。<RoutedUICommand x:Key="CommandsExit" />

ここで言及したのと同じコードを試しましたが、VS2010 + .Net4.0で動作します。Expressionブレンドで開き、問題を参照できますか?

+0

キー内のドットがプロジェクトで動作するため、マインの中で動作するはずです。しかし、私はそれを試して、それは動作しませんでした。 –

関連する問題