2

アプリケーションに MainWindow があります。MainWindow 内で、ユーザー コントロール (ucA) を動的にホストします。ucA 内に別のユーザー コントロール (ucB) があります。

ucB で保存ボタンをクリックすると、ucA でルーチンを実行する必要があります。

ucA でルーチンを参照するにはどうすればよいですか?

4

1 に答える 1

1

ここに私が考えることができるいくつかの方法があります:-

CallMethodActionxaml で使用して、親ユーザー コントロールのメソッドを呼び出すことができます。コードは次のようになります:-

<UserControl x:Class="WpfApplication.ucB"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
     Height="300" Width="300">
<StackPanel>
    <Button Content="Save" x:Name="SaveButton" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Click">
                <ei:CallMethodAction TargetObject="{Binding RelativeSource={RelativeSource FindAncestor, AncestorLevel=2, AncestorType=UserControl}}"
                                MethodName="MethodToCallOnucA" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </Button>        

</StackPanel>

このようにして、ucB の親である ucA でメソッドを呼び出すことができます。しかし、xaml からメソッドを呼び出すこの方法には大きな制限があります。制限は、この場合、`MethodToCallOnucA' が void を返す必要があり、メソッド パラメータを持たない必要があることです。

メソッドにパラメーターを送信する必要がある場合は、ここで 2 番目のアプローチに従う必要があります。このためには、コマンドを使用して Usercontrol のメソッドを呼び出す必要があります。上記の xaml でボタンのコードを次のように変更する必要があります:-

<Button Content="Save" x:Name="SaveButton" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Click">
                <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorLevel=2, AncestorType=UserControl}, Path=DoActionCommand}" CommandParameter="ValueToSendAsMethodParameter" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </Button>

ここで、DoActionCommand は、ユーザー コントロール ucA で定義された ICommand プロパティであり、この ICommand は、ucA で呼び出す必要があるメソッドを指しています。

于 2013-05-22T18:19:12.503 に答える