【问题标题】:CallMethodAction doesn't execute code-behind methods in Windows Phone 8.1CallMethodAction 在 Windows Phone 8.1 中不执行代码隐藏方法
【发布时间】:2014-04-22 13:39:00
【问题描述】:

我创建了一个简单的 XAML 页面:

    <Page.DataContext>
        <local:MainPageViewModel />
    </Page.DataContext>

    <Interactivity:Interaction.Behaviors>
        <Core:DataTriggerBehavior Binding="{Binding MyNumber}" Value="3">
            <Core:CallMethodAction MethodName="TestMethod" TargetObject="{Binding ElementName=page}" />
            <Core:CallMethodAction MethodName="ViewModelMethod" TargetObject="{Binding Mode=OneWay}" />
        </Core:DataTriggerBehavior>
    </Interactivity:Interaction.Behaviors>

    <Grid>

        <TextBox
            Margin="0"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Text="{Binding MyNumber,
                                Mode=TwoWay}"
            TextWrapping="Wrap" />

    </Grid>

以及该页面的 ViewModel:

    public class MainPageViewModel : INotifyPropertyChanged
    {
        private int _myNumber;

        public int MyNumber
        {
            get { return _myNumber; }
            set
            {
                _myNumber = value;
                RaisePropertyChanged("MyNumber");
                Debug.WriteLine("Property MyNumber changed.");
            }
        }

        public void ViewModelMethod()
        {
            Debug.WriteLine("ViewModelMethod called.");
        }

        #region INotifyPropertyChanged

        public event PropertyChangedEventHandler PropertyChanged;

        protected void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        #endregion INotifyPropertyChanged
    }

在后面的页面代码中,我添加了如下方法:

        public void TestMethod()
        {
            Debug.WriteLine("Method TestMethod called.");
        }

当我在 TextBox 中输入数字 3 时,只会执行第二个 CallMethodAction。

后面代码中的 TextMethod 没有执行。为什么?我在 Windows Phone 8 中从未遇到过这个问题。

【问题讨论】:

  • TargetObject="{Binding ElementName=page}" 您是否在您的PhoneApplicationPage 节点上设置了x:Name="page"?
  • 是的,我做到了。有趣的是,虽然这段代码没有执行,但它也没有抛出任何错误。
  • 我可以将 MethodName 更改为任何内容,并且只要将 TargetObject 设置为“{Binding ElementName=page}”,即使某个方法不存在,也不会引发错误。

标签: c# xaml data-binding windows-phone-8.1


【解决方案1】:

找到了解决办法!在 Windows Phone 8.0 中,您必须设置 TargetObject 属性才能调用后面代码中的方法。在 Windows Phone 8.1 中,您根本不需要设置 TargetObject。有效的代码是:

<Core:CallMethodAction MethodName="TestMethod" />

尽管如此,我仍然认为它至少应该抛出一个错误,如果一个方法不存在......

【讨论】:

    【解决方案2】:

    这适用于我,Windows Phone 8.1...

    XAML 页面

    <Interactivity:Interaction.Behaviors>
        <Core:EventTriggerBehavior EventName="Tapped">
            <Core:CallMethodAction MethodName="TestMethod" TargetObject="{Binding ElementName=page}"/>
        </Core:EventTriggerBehavior>
    </Interactivity:Interaction.Behaviors>
    

    基于 Tappe 事件,但我认为这将适用于您的情况。

    对于方法,很重要!公开。

    public void TestMethod(object sender, TappedRoutedEventArgs e)
    {
        Debug.WriteLine("TestMethod");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多