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中从未遇到过这个问题。
找到了解决方案!在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");
}