[英]CallMethodAction doesn't execute code-behind methods in Windows Phone 8.1
我創建了一個簡單的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.");
}
當我在文本框中輸入數字3時,僅執行第二個CallMethodAction。
后面代碼中的TextMethod不執行。 為什么? 我在Windows Phone 8中從未遇到過此問題。
找到了解決方案! 在Windows Phone 8.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事件,但我認為in可以解決您的情況。
對於方法,很重要! 公開。
public void TestMethod(object sender, TappedRoutedEventArgs e)
{
Debug.WriteLine("TestMethod");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.