我正在更改类构造函数中的标签,它工作正常,标签更新(“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));
}
}
答案 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()
,并且将自动使用已更改属性的名称。