【问题标题】:WP8 XAML DataTrigger CallMethodAction used to call method from the code behindWP8 XAML DataTrigger CallMethodAction 用于从后面的代码中调用方法
【发布时间】:2014-03-04 04:11:02
【问题描述】:

我有一个 listpicker 元素,我需要在 listpicker“关闭”或返回其正常状态时运行一个方法。我的 xml 看起来像这样:

<i:Interaction.Triggers>
    <exp:DataTrigger Binding="{Binding ListPickerMode, ElementName=ListPickerAssembly}" Value="Normal">

现在我需要从后面的代码中调用一个方法。我能想到要搜索的所有内容的前 3 页都有紫色链接。

我看到有一个:

<exp:CallMethodAction

标签看起来可以工作,但我不知道如何使用它。

任何帮助将不胜感激。

更新

搞定了。在我的 .cs 中,我添加到我的构造函数中:

DataContext = this;

在我的 XAML 中我添加了:

x:Name="Page"

然后在我的数据触发器中我添加了:

<exp:CallMethodAction TargetObject="{Binding DataContext, ElementName=Page}" MethodName="Fire" />

它现在调用该方法。

【问题讨论】:

    标签: c# xaml windows-phone-8


    【解决方案1】:

    CallMethodAction 使用TargetObjectMethodName 属性来确定调用哪个方法。如果你想定位一个代码隐藏方法,那么“TargetObject”必须是你的控件/页面/任何东西的根。如果是模板化控件,则使用

    <exp:CallMethodAction TargetObject="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                          MethodName="MethodToInvoke" />
    

    如果是页面/控件,则可以使用ElementName 绑定(我不能 100% 确定这确实有效,但请尝试...)

    <phone:Page 
        x:Name="page" ...
    
        <exp:CallMethodAction TargetObject="{Binding ElementName=page}"
                              MethodName="MethodToInvoke" />
    

    然后,只需确保您的方法是公开的(在这方面它与使用事件处理程序不同)。

    public void MethodToInvoke() { ... }
    

    【讨论】:

    • 感谢您的回复!我仍然没有运气。我正在调用后面的代码,所以我使用了您显示的第一个代码。我也试过:&lt;exp:CallMethodAction TargetObject="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}}" MethodName="Fire" /&gt; 我的 .cs 方法只是:public void Fire() { MessageBox.Show("Fire"); } 我不确定我是否缺少某种参考或其他东西。
    • @Prizz 啊 ...问题是页面不是“TemplatedParent”(仅适用于控件模板内部)。在 Silverlight 中,使用“RelativeSource AncestorType=phone:Page”很容易,但不幸的是,WP 中不存在该绑定。
    • @Prizz 我会尝试使用上面的第二个示例,即“ElementName”绑定——正如我所提到的,我不确定它是否有效,但如果有效,那将是最简单的。如果没有,那么使用视图模型可能是最简单的。
    • @Prizz 但请稍等……您确定“ListPickerMode”实际上会在您认为发生变化时发生变化吗?看起来这只是控件的设置,而不是告诉您弹出窗口是否打开的内容。
    • @Prizz 也许你是对的,我不知道。很难说。 github.com/nokiadatagathering/WP7-Official/blob/master/…
    猜你喜欢
    • 2013-01-04
    • 2015-04-06
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    相关资源
    最近更新 更多