Как я могу предотвратить UpdateSource для вычисленных связанных текстовых полей при загрузке данных?
Когда пользователи вводят числа в 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 ответ
Это сработает, мы фактически сделали то же самое в проекте, чтобы избежать "штормов событий" между элементами управления.
Единственное, на что следует обратить внимание - это ошибки, чтобы вы не застряли в состоянии "загрузки" и обновления перестали работать.