Мне нужно выполнить двустороннюю связь с использованием WPF на клиенте, а WCF - между сервером и клиентом. Есть три части:Обновление WPF DataGrid без запуска OnPropertyChanged
- Пользовательский интерфейс (который пользователь может ввести значения в, вид в шаблоне MVVM)
- Клиент код позади (модели представления в шаблон MVVM)
- Удаленный WCF сервер, который говорит с моделью просмотра.
Когда пользователь вводит что-то в пользовательский интерфейс, из-за двусторонней привязки данных WPF значение обновляется в модели представления. Модель view запускает событие OnPropertyChanged. При прослушивании этого события модель просмотра информирует сервер об изменении. ЭТО ОК!
ИСПОЛЬЗОВАНИЕ ДРУГОГО НАПРАВЛЕНИЯ - ПРОБЛЕМА. Если сервер обновляется, я ожидаю, что пользователь сможет увидеть изменение непосредственно в пользовательском интерфейсе. Сервер отправляет данные модели просмотра. Модель просмотра обновляет свойство, так что пользовательский интерфейс может отображать значение. Но при настройке этого свойства он снова запускает событие OnPropertyChanged, и это изменение снова отправляется на сервер. Подумайте об этом так:
public int MyProperty
{
get
{
return myProperty;
}
set
{
// Essentially, I want to know how to tell when the code enters here from the client typing on the UI, or from the server.
myProperty = value;
OnPropertyChanged("MyProperty");
}
}
public void OnPropertyChanged(string propertyName)
{
// send this property and its value to the server.
}
простая проверка equalty в инкубационных свойств 'множество {если (_propValue == значение) возвращение; ...} 'должен предотвращать возможные циклы. – ASh
Как правило, рекомендуется делать проверку равенства в сеттерах, как упоминает Эш. Принятие событий xxxChanged, когда ничего фактически не изменилось, может вводить в заблуждение. –
Это только решает часть моей проблемы. Если пользователь обновляет клиент из пользовательского интерфейса, который обновляет сервер, это работает нормально. Проблема в том, что сервер обновляет клиент, который отображается в пользовательском интерфейсе. Когда сервер возвращает сообщение клиенту, клиент изменяет свойство и запускает событие OnPropertyChanged для обновления пользовательского интерфейса. Но это же событие также обновляет сервер. Я не могу отделить эти два. – user3685285