Как я могу предотвратить UpdateSource для вычисленных связанных текстовых полей при загрузке данных? - PullRequest
0 голосов
/ 24 марта 2011

Когда пользователи вводят числа в 3 текстовых поля, я вычисляю среднее значение в 4-м текстовом поле.Метод CalculateAverage вызывается из события TextChanged первых 3 текстовых полей.Все текстовые поля связаны.(Примечание: я знаю, что рассчитанные значения не должны храниться в базе данных, но я не могу это изменить.) Я использую WPF 4 и Entity Framework 4.

Моя проблема в том, что средний тексткоробка всегда имеет EntityState.Modified.Это связано с тем, что при загрузке данных или навигации по записям событие TextChanged вызывает метод CalculateAverage.Даже если пользователь не внес изменений и CurrentValue (в среднем) совпадает с OriginalValue, механизм привязки теперь считает эту запись «грязной».

Мне интересно, есть ли более чистое решение, чем этоЯ реализовал.Мое исправление - установить флаг во время загрузки данных и во время навигации по записям.Это означает, что мне пришлось добавить событие OnRecordChanging, чтобы установить флаг _changingRecords, и событие OnRecordChanged, чтобы отменить его.В начале CalculateAverage у меня есть: if (_loadingData || _changingRecords) return; для выхода из CalculateAverage и предотвращения обновления среднего поля.

Есть ли более чистый подход, чтобы избежать этой проблемы?

1 Ответ

0 голосов
/ 24 марта 2011

Это сработает, мы фактически сделали то же самое в проекте, чтобы избежать "штормов событий" между элементами управления.

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

...