CallMethodAction没有';t在Windows Phone 8.1中执行代码隐藏方法

本文关键字:执行 代码 方法 隐藏 Phone Windows 没有 CallMethodAction | 更新日期: 2023-09-27 17:59:17

我创建了一个简单的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未执行。为什么?我在WindowsPhone8中从未遇到过这个问题。

CallMethodAction没有';t在Windows Phone 8.1中执行代码隐藏方法

找到了解决方案!在WindowsPhone8.0中,必须设置TargetObject属性才能调用代码隐藏中的方法。在Windows Phone 8.1中,您根本不设置TargetObject。有效的代码是:

<Core:CallMethodAction MethodName="TestMethod" />

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

这适用于我,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");
}