2014-04-22 39 views
0

我创建了一个简单的XAML页面:CallMethodAction不会在Windows Phone的执行代码隐藏方法8.1

<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中遇到这个问题。

+0

'TargetObject =“{Binding ElementName = page}”'你在'PhoneApplicationPage'节点上设置了'x:Name =“page”'吗? –

+0

是的,我做到了。有趣的是,尽管这段代码没有执行,但它也不会抛出任何错误。 – lukeshek

+0

我可以将MethodName更改为任何内容,并且只要TargetObject设置为“{Binding ElementName = page}”,即使某个方法不存在,也不会抛出任何错误。 – lukeshek

回答

0

找到了解决方案!在Windows Phone 8.0中,您必须将TargetObject属性设置为在后面的代码中调用方法。在Windows Phone 8.1中,根本不设置TargetObject。该工程的代码是:

<Core:CallMethodAction MethodName="TestMethod" /> 

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

+0

它不适合我。 – Sergey

0

这个工作对我来说,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"); 
} 
相关问题