簡體   English   中英

CallMethodAction不執行Windows Phone 8.1中的代碼隱藏方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM