我在XAML中具有此TextBlock
,其文本属性已绑定到viewmodel命令。
<TextBlock Text="{Binding SomeText}"></TextBlock>
同时,视图模型如下所示:
\\ the text property
private string _someText = "";
public const string SomeTextPropertyName = "SomeText";
public string SomeText
{
get
{
return _someText;
}
set
{
Set(SomeTextPropertyName, ref _someText, value);
}
}
\\ the command that changes the string
private RelayCommand<string> _theCommand;
public RelayCommand<string> TheCommand
{
get
{
return _theCommand
?? (_theCommand = new RelayCommand<string>(ExecuteTheCommand));
}
}
private void ExecuteTheCommand(string somestring)
{
_someText = "Please Change";
\\ MessageBox.Show(SomeText);
}
我可以成功地调用TheCommand
,就像使用触发元素中的命令调用MessageBox
一样。 SomeText
值也会更改,如注释的MessageBox
行中所示。我在这里做错什么了,有没有愚蠢的错误?
您直接设置字段_someText
,这意味着您正在绕过SomeText
属性的设置器。但是该设置方法正在调用内部引发Set(SomeTextPropertyName, ref _someText, value);
事件的PropertyChanged
方法。
PropertyChanged
事件对于数据绑定是必需的,因此它知道SomeText
属性已更新。
这意味着,而不是这样做:
private void ExecuteTheCommand(string somestring)
{
_someText = "Please Change";
\\ MessageBox.Show(SomeText);
}
只需这样做,它就应该起作用:
private void ExecuteTheCommand(string somestring)
{
SomeText = "Please Change";
\\ MessageBox.Show(SomeText);
}