Изменить TextBox.Text при изменении видимости родительского контейнера с помощью MVVM - PullRequest
0 голосов
/ 18 июня 2011

Я создаю LOB-приложение с WPF и MVVM. Когда пользователю необходимо вставить данные клиента, он может сделать это из нескольких окон (которые являются пользовательскими элементами управления со свойством видимости, установленным через привязку, поэтому он может видеть только одно за раз).

Проблема в том, что все элементы управления TextBox сохраняют свои текстовые значения между изменениями видимости (свернуты <-> видимые), и я хочу их сбросить. Создание триггера в стиле текстового поля не работает (но без ошибок или чего-либо еще).

Как мне это сделать, чтобы поддерживать связь с шаблоном MVVM?

Я думаю об использовании ObjectDataProvider для вызова метода, использующего отражение, и установки каждого значения TextBox.Text. Этот объектный поставщик данных будет установлен с триггерами в стиле StackPanel (контейнер).

1 Ответ

0 голосов
/ 18 июня 2011

Если я вас правильно понимаю, то, что вы пытаетесь достичь, это волшебник.Когда пользователь нажимает кнопку «Далее», текущий пользовательский элемент управления скрывается, и открывается следующий пользовательский элемент управления.

Поскольку вы работаете с MVVM, я ожидаю, что каждый TextBox.Text будет привязан к свойству в модели представления.Если это так, то вам не нужно использовать триггеры.Все, что вам нужно сделать, это установить каждое свойство в пустую строку непосредственно перед установкой видимости пользовательского элемента управления на Visible.

Например, если пользователь нажимает кнопку Далее, и следующий экран, который будет отображаться,Screen3, тогда вы должны установить все свойства на Screen3ViewModel, которые используются для заполнения текстовых полей (например, Name, Address, Occupation) пустыми строками.

Ваш текстполя должны выглядеть примерно так:

<TextBox Text={Binding Name} />
<TextBox Text={Binding Address} />
<TextBox Text={Binding Occupation} />

Другими словами, все делайте с помощью кода, а не разметки.

Обратите внимание, что вам необходимо убедиться, что ваши модели представлений реализуют INotifyPropertyChangedтак что механизм привязки знает, как обновить текстовые поля при изменении свойств в модели представления.

...