1

複数のコマンドをボタンにバインドすることは可能ですか?

メインアプリケーション(親アプリケーション)で呼び出しているユーザーコントロールがあります。

両方のコントロール(ユーザーコントロールとメインウィンドウ)でクリックコマンドを処理したいと思います。しかし、私は1つしか取得できません。

私がこれを手に入れることができる方法はありますか?

どんな助けでも本当にありがたいです。

コードスニペット:

public class MainWindowFooterCommands
{
    public static readonly RoutedUICommand FooterClickLocalCommand = new RoutedUICommand("Local Button Command", "FooterClickLocalCommand", typeof(MainWindowFooterCommands));
}

private void MainWindowFooterBindCommands()
{
    CommandBinding cmdBindingBXClick = new CommandBinding(MainWindowFooterCommands.FooterClickLocalCommand);
        cmdBindingBXClick.Executed += ClickCommandHandler;
        CommandBindings.Add(cmdBindingBXClick);
}


void ClickCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
    //Do Something
}


//Parent Control holding an instance of the footer control.
class MainWindow {

    public MainWindow() 
    {
        CommandBinding cmdBindingBXClick1 = new CommandBinding(MainWindowFooterCommands.BXClickMainWindowCommand);
        cmdBindingBXClick1.Executed += LoadParent;  
        CommandBindings.Add(cmdBindingBXClick1);
    }

        public void LoadParent(object sender, ExecutedRoutedEventArgs e)
        {   
        LoadParentWindow();
        }
}

よろしく、Tushar

4

2 に答える 2

5

複数のコマンドを集約しようとしている可能性がありますが、これは当然のことです。

Prismを使用している場合は、CompositeCommandと呼ばれるこのクラスが組み込まれています(少し下にスクロールします):https ://msdn.microsoft.com/en-us/library/ff921126.aspx

それ以外の場合、Josh Smithは、「コマンドグループ」と呼ばれる彼の実装に関する非常に優れた記事を持っています:http://www.codeproject.com/KB/WPF/commandgroup.aspx

このようにロールアップできる非常に優れたシナリオがいくつかあります(たとえば、「すべて保存」)。トリックのバッグに適したツールです。

于 2009-08-04T07:19:46.907 に答える
0

AFAIK WPFは、さまざまなレベルで複数のコマンドバインディングをサポートするために、すぐに使用できるものは何も提供していませんが、次のことを試すことができます。

void ClickCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
    IInputElement parent = (IInputElement) LogicalTreeHelper.GetParent((DependencyObject)sender);
    MainWindowFooterCommands.BXClickMainWindowCommand.Execute(e.Parameter, parent);
}

ただし、親が本当にIInputElementであるかどうかをテストする必要がある場合があります。

于 2009-08-04T07:06:56.823 に答える