2
我在我的应用程序中有一个MainWindow。 在主窗口中,我动态地托管一个用户控件(ucA)。 在ucA内我有另一个用户控件(ucB)。跨越用户控件执行功能wpf c#
当我点击ucB上的保存按钮时,我需要在ucA上执行一个例程。
我该如何参考ucA上的例程?
我在我的应用程序中有一个MainWindow。 在主窗口中,我动态地托管一个用户控件(ucA)。 在ucA内我有另一个用户控件(ucB)。跨越用户控件执行功能wpf c#
当我点击ucB上的保存按钮时,我需要在ucA上执行一个例程。
我该如何参考ucA上的例程?
这里有一些方法我能想到的: -
您可以使用CallMethodAction
在XAML中调用父用户控件的方法。该代码是这样的: -
<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>
这样你就可以调用UCA的方法,它是UCB的父母。但是这种从xaml调用方法的方式存在很大的局限性。限制是在这种情况下,您的`MethodToCallOnucA'必须返回void并且必须没有方法参数。
如果你必须发送参数给你的方法,那么你需要按照这里的第二种方法。为此,我们需要使用Commands来调用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的点,你需要在UCA调用该方法定义的ICommand的属性。
会给这个试试看。 期待对此进行测试。 –