2017-02-11 11 views
0

コマンドを使用してsplitview.paneを開いて閉じたいとします。私はこれらの2つの方法をRelayCommandクラスを使用して呼び出すコマンドでxamlプロパティを変更する

<SplitView Name="AppNavigation" DisplayMode="CompactOverlay" IsPaneOpen="False" CompactPaneLength="50" OpenPaneLength="200"> 
    <SplitView.Pane> 
     <Button Name="Hamburger" FontFamily="Segoe MDL2 Assets" Content="&#xE700;" FontSize="24" Width="50" Height="50" Command="{Binding HamburgerExecute}" /> 
    </SplitView.Pane> 
</SplitView> 

:これは私のサンプルのXAMLコードである

private bool HamburgerCanExecute(object obj) 
    { 
     return true; 
    } 

    private void HamburgerExecute(object obj) 
    { 
     AppNavigation.IsPaneOpen = !AppNavigation.IsPaneOpen; // this doesn't work 
    } 

私はXAMLのプロパティを変更するコマンドを使用する方法誰かが私に説明できますか?

+0

コードをデバッグしようとしましたか?プログラムがあなたのコマンドを入力していますか?あなたはバインディングを使用しているので、datacontextを設定しましたか? – Romasz

+0

[ViewModelBaseのコマンドにWPFボタンをバインドするにはどうすればいいですか?](http://stackoverflow.com/questions/12422945/how-to-bind-wpf-button-to-a-command-in-viewmodelbase)重複しているわけではありませんが、同じ問題に沸きます。 (コマンドのバインド方法) – CSharpie

+0

あなたは 'RelayCommand'クラスを使用していますが、これは' ICommand'を実装しているとします。このコマンドにバインドしますか?メソッドにバインドするように見えます。 – Blacktempel

答えて

0

...いまいましい

だから、正しいコードは次のとおりです。

private void HamburgerExecute(object obj) 
{ 
    SplitView navigation = obj as SplitView; 
    navigation.IsPaneOpen = !navigation.IsPaneOpen; 
} 

とCommandParameterで私のxamlファイル:

<SplitView Name="AppNavigation" DisplayMode="CompactOverlay" IsPaneOpen="False" CompactPaneLength="50" OpenPaneLength="200"> 
    <SplitView.Pane> 
     <Button Name="Hamburger" FontFamily="Segoe MDL2 Assets" Content="&#xE700;" FontSize="24" Width="50" Height="50" Command="{Binding HamburgerCommand}" CommandParameter="{Binding ElementName=AppNavigation}" /> 
    </SplitView.Pane> 
</SplitView> 
0

Buttonにメソッドを直接バインドしているようですが、あなたはRelayCommandを使用しています。実際の方法ではなく、RelayCommandを拘束していることを確認してください。

希望すると助かります!

+0

これはまだ間違いでしたが、今はどうすればIsPaneOpenを操作できますか? AppNavigationはこのコンテキストでは知られていません。 – r01f

0

ボタンでクリックイベントを作成します。

<SplitView Name="AppNavigation" DisplayMode="CompactOverlay" IsPaneOpen="False" CompactPaneLength="50" OpenPaneLength="200"> 
<SplitView.Pane> 
    <Button Name="Hamburger" FontFamily="Segoe MDL2 Assets" Content="&#xE700;" FontSize="24" Width="50" Height="50" Click="Hamburger_Click /> 
</SplitView.Pane> 

C#の:私はUIの名前空間を統合するのを忘れ

private void Hamburger_Click(object sender, RoutedEventArgs e) 
    { 
     AppNavigation.IsPaneOpen = !AppNavigation.IsPaneOpen; 
    } 
+0

あなたの答えをありがとうが、私はコマンドとmvvmパターンを使用したい。したがって、コードビハインドのクリックイベントは私の選択肢ではありません。 – r01f

関連する問題