Значение связанной строки из ViewModel не обновляется в элементе пользовательского интерфейса - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть TextBlock в XAML, что его текстовое свойство связано с командой 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. Что я здесь не так делаю, есть глупая ошибка?

1 Ответ

0 голосов
/ 19 февраля 2020

Вы устанавливаете поле _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);
}
...