触发PropertyChanged,但视图未更新

时间:2017-11-18 04:37:40

标签: xamarin xamarin.ios xamarin.forms xamarin.android

我正在更改类构造函数中的标签,它工作正常,标签更新(“0”)。当我点击一个按钮时,我也试图更新标签,但它不起作用(“X”)。我注意到调试标签值已更新,触发了PropertyChanged,但视图没有改变。

public class HomeViewModel : ViewModelBase
{
    string playerA;
    public string PlayerA
    {
        get
        {
            return playerA;
        }
        set
        {
            playerA = value;
            this.Notify("playerA");
        }
    }

    public ICommand PlayerA_Plus_Command
    {
        get;
        set;
    }

    public HomeViewModel()
    {
        this.PlayerA_Plus_Command = new Command(this.PlayerA_Plus);
        this.PlayerA = "0";
    }

    public void PlayerA_Plus()
    {
        this.PlayerA = "X";
    }
}



public abstract class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void Notify(string propertyName)
    {
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

1 个答案:

答案 0 :(得分:4)

PropertyChangedEventArgs中传递的参数名称错误。您正在使用" playerA"但是(公共)属性的名称是" PlayerA" (大写" P")。将this.Notify("playerA");更改为this.Notify("PlayerA");甚至更好:

Notify(nameof(PlayerA));

您可以通过向[CallerMemberName]方法添加Notify() attribute来完全摆脱传递参数名称。

protected void Notify([CallerMemberName] string propertyName = null)

这使您可以在没有参数的情况下调用Notify(),并且将自动使用已更改属性的名称。