Привязка не работает в командном методе ViewModel MVVM - PullRequest
0 голосов
/ 30 октября 2018

Я работаю над приложением MVVM WPF, в котором я связываю несколько значений от ViewModel до вида.

Теперь я создал новый ViewModel, где я должен привязать значение к TextBox после Button клика. Когда я попробовал это простое связывание, у меня не получилось. К моему удивлению, привязка работает, когда значение присваивается в конструкторе.

Я в замешательстве.

ViewModel:

public ABCViewModel{
       txtItems = "Hello world";      //this works
}


 private string m_stxtItem = "";

        public string txtItems
        {
            get { return this.m_stxtItem; }

            set
            {
                if (this.m_stxtItem != value)
                {                    
                    this.m_stxtItem = value;

                }
            }
        }

public ICommand BindTextValue { get { return new RelayCommand(SeriesBinding); } }

 private void SeriesBinding()
        {
               txtItems = "Hi";                         //does not work

        }

XAML:

<TextBox Text="{Binding txtItems,Source={StaticResource ABCViewModel}}" />

<Button Command="{Binding BindTextValue,Source={StaticResource ABCViewModel}}">Click</Button>

Почему это не сработало и где я не прав?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вам необходимо реализовать интерфейс INotifyPropertyChanged в вашей ViewModel.

Вот несколько ссылок MSDN о том, что такое интерфейс и как его реализовать:

Интерфейс INotifyPropertyChanged

Как: реализовать интерфейс INotifyPropertyChanged

В основном потому, что вы установили ViewModel в качестве источника данных для представления, после создания представление будет искать его значения в модели представления. С этого момента ViewModel нужен механизм для уведомления View об изменениях. Вид не обновляется периодически или что-то в этом роде. Именно здесь вступает интерфейс INotifyPropertyChanged. Инфраструктура WPF отслеживает запуск этих событий и заставляет представление обновить его значение.

0 голосов
/ 30 октября 2018

Просто ответьте: вам не хватает реализации INotifyPropertyChanged, необходимой для автоматического связывания данных.

Расширенный ответ, почему он работает при установке значения в конструкторе: начальная привязка (чтение значения) из представления происходит ПОСЛЕ того, как был вызван ваш конструктор ViewModel, и ваше значение было установлено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...