Patrick Skelton Ответов: 1

Как получить значение в одной сетке данных, которое будет изменено при изменении ячейки в другой?


У меня есть два примера этого DataGrid на том же экране в отношениях мастер-деталь.

Мастер DataGrid показывает разделы в смете и детали DataGrid показывает отдельные статьи затрат в разделе. У мастера есть столбец, который показывает промежуточный итог для раздела.

Когда я редактирую значение номенклатуры затрат в деталях DataGrid, Я, очевидно, хочу, чтобы столбец промежуточного итога на мастере DataGrid чтобы отразить это, но я не могу понять, как заставить его сделать это.

В другом месте экрана у меня есть общая сумма для всех промежуточных итогов во всех разделах (т. е. общая сумма), и она немедленно обновляется, чего я и ожидал бы, потому что любые изменения в слое модели заставляют обработчик событий в view-model выполнять следующий вызов с пустой строкой в качестве параметра:

protected void OnPropertyChanged( [CallerMemberName] string propertyName = "" )
{
    PropertyChanged?.Invoke( this, new PropertyChangedEventArgs( propertyName ) );

Насколько я понимаю, увольнение PropertyChanged событие с пустым именем свойства указывает механизму привязки обновить все привязки, и действительно, до сих пор это всегда имело место в приложении.

Как я могу получить значение в ячейке мастера DataGrid признать, что ценность, к которой он привязан, изменилась? Есть ли признанный способ сделать это?

Что я уже пробовал:

Я много искал ответа на этот вопрос, но ни один из них, похоже, не касается точного сценария, который я описал выше. Я удивлен, потому что это не кажется мне необычным требованием.

Я также думал о взломе чего - то вместе с помощью обработчиков событий на уровне пользовательского интерфейса, но это именно то, что я чувствую- взлом. Должен же быть более элегантный способ?

1 Ответов

Рейтинг:
12

Patrick Skelton

Похоже, решение действительно очень простое. Я просто наткнулся на него, думая: "интересно, что произойдет, если я изменюсь..."

Статьи затрат в детальном представлении находились в ObservableCollection но те разделы, к которым относится мастер DataGrid переплеты были стандартом List. Изменение последнего на то, чтобы оно также было ObservableCollection устранить проблему.

Хотя должен сказать, что я удивлен. Мое понимание того, что ObservableCollection было то, что он занимается вставкой и удалением элементов, а также обновлением всей связанной коллекции. Я не думал, что это связано с уведомлением о том, что свойство одного элемента в связанной коллекции изменилось. Ясно, что я ошибаюсь.