ViewModel的绑定字符串值未在UI元素中更新

问题描述 投票:0回答:1

我在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行中所示。我在这里做错什么了,有没有愚蠢的错误?

xaml mvvm mvvm-light
1个回答
0
投票

您直接设置字段_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);
}
© www.soinside.com 2019 - 2024. All rights reserved.