Как связать данные WPF: GUI -> Бизнес-объект -> GUI - PullRequest
0 голосов
/ 14 января 2011

У меня есть привязка из текстового поля WPF к бизнес-объекту. Это двусторонняя привязка с обновлением LostFocus. Если я пишу в текстовом поле, он обновляет BO. Все идет нормально.

<TextBox.Text>
    <Binding Path="SelectedEmployees" 
             UpdateSourceTrigger="LostFocus" />
</TextBox.Text>

Но я бы хотел, чтобы он делал следующее: если я введу «1, 10, 8, 9», то BO обновится, а BO отсортирует ввод в «1, 8, 9, 10». Затем текстовое поле обновляется с помощью этих обработанных данных из BO.

Как получить привязку для повторного обновления текстового поля? Должен ли я сделать это "вручную" через код позади?

Ответы [ 2 ]

1 голос
/ 14 января 2011

Свойство TextBox UpdateSourceTrigger имеет значение по умолчанию LostFocus, поэтому вам не нужно задавать его явно.Предполагая, что ваше свойство SelectedEmployees имеет геттер и сеттер, привязка будет работать по умолчанию в двух направлениях.

Поэтому все, что вам нужно сделать, это убедиться, что вы реализуете INotifyPropertyChanged в своем бизнес-объекте (илив качестве свойства-обертки в вашей модели представления) и в вашем установщике SelectedEmployees выполните упорядочивание ввода, установите для вспомогательного поля это упорядоченное значение и вызовите событие PropertyChanged, чтобы сделать недействительной привязку и чтобы пользовательский интерфейс забрал обновленный(отсортировано) через геттер SelectedEmployees.

private string selectedEmployees;
public string SelectedEmployees
{
  get { return this.selectedEmployees; }
  set
  {
    string sortedValue = // sort value here
    this.selectedEmployees = sortedValue;
    this.OnPropertyChanged("SelectedEmployees");
  }
}
1 голос
/ 14 января 2011

Если у вас двусторонняя привязка, а BO сортирует значения и устанавливает свойство после сортировки по новому значению, это должно отражаться элементом управления.
Если нет, проверьте, правильно ли вы реализовали INotifyPropertyChanged, иPropertyChanged срабатывает после сортировки (я предполагаю, что ваш BO не DependencyObject).

<TextBox.Text>     
       <Binding Path="SelectedEmployees" UpdateSourceTrigger="LostFocus" Mode="TwoWay"/> </TextBox.Text> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...