【发布时间】: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