2013-05-22 24 views
2

我在我的应用程序中有一个MainWindow。 在主窗口中,我动态地托管一个用户控件(ucA)。 在ucA内我有另一个用户控件(ucB)。跨越用户控件执行功能wpf c#

当我点击ucB上的保存按钮时,我需要在ucA上执行一个例程。

我该如何参考ucA上的例程?

回答

1

这里有一些方法我能想到的: -

您可以使用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的属性。

+0

会给这个试试看。 期待对此进行测试。 –