powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DataGrid.GetBindingExpression().UpdateTarget не работает
6 сообщений из 6, страница 1 из 1
DataGrid.GetBindingExpression().UpdateTarget не работает
    #39519808
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть DataGrid с названием ProjectList.
Код: xml
1.
2.
3.
<DataGrid x:Name="ProjectList"
    ItemsSource="{Binding ProjectCollection}">
</DataGrid>



Источник - банальный массив структур (две строки и число {get;set;})

Так работает:
Код: c#
1.
2.
ProjectList.ItemsSource = null;
ProjectList.ItemsSource = ProjectCollection;


Но вот так не работает:
Код: c#
1.
ProjectList.GetBindingExpression(DataGrid.ItemsSourceProperty).UpdateTarget();


Вопрос - почему?

Для тех, кто скажет, что писать надо вообще иначе
Я в курсе. INotifyPropertyChanged и прочее.
Я сейчас иду по учебнику и автор обозначил проблемы отсутствия "обратной связи" при изменении свойств и под конец главы предложил "грубое решение" - UpdateTarget, а в дальнейших главах будет рассматриваться более правильный подход.
Но это решение не работает, поэтому и вопрос.
...
Рейтинг: 0 / 0
DataGrid.GetBindingExpression().UpdateTarget не работает
    #39519811
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. я изменяю одно из полей в одной из строк программно. Соответственно, таблица об этом не знает. И потом с помощью вот этой вот строки пытаюсь обновить таблицу - но она не обновляется.
...
Рейтинг: 0 / 0
DataGrid.GetBindingExpression().UpdateTarget не работает
    #39519884
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
капец писал развернутый ответ и всё удалилось, просто жесть.
так как второй раз мне лень писать напишу коротко.
Почему не обновляется?
Потому, что если свойству зависимости присвоить объект, а затем снова его присвоить, то 2 раз значение обновится и обновление не сработает, так как перед обновлением свойства зависимости оно проверяет, не тот ли самый объект в него передается, который уже был ему присвоен. Обновляете вы через Binding или локально или еще как, посрать совершенно.

Во вторых, "ProjectList.ItemsSource = ProjectCollection" это нефига не связывание, а обычное присвоение значения, которое будет локальным и ни каким binding'ом тут даже не пахнет

Если вам нужно обновить значение в ячейке, после обновления свойства у элемента коллекции ProjectCollection, то существуют 4 дерьмовых способа для вашего случая, которыми я лично не стал бы пользоваться.
а) клонировать коллекцию и присвоить к свойству зависимости ItemsSource этого клона, так как после клонирования коллекции указатель будет другой, свойство зависимости корректно обновится и DataGrid перестроится.
б) присвоить свойству зависимости ItemsSource значение null, а затем старое значение, после чего DataGrid перестроится дважды
в) получить представление коллекции ProjectCollection через CollectionViewSource.GetDefaultView(IEnumerable)
затем вызвать у этого представления метод Refresh или возбудить событие Reset.
Тогда DataGrid перестроится.
в) можно обновить все свойства через вызов NotifyPropertyChanged(string.Empty), но обновятся они только в рамках текущего класса, то есть нужно будет переопределить класс коллекции.

Все выше перечисленные методы дерьмовые.
Ваша проблема в архитектуре приложения. Ваши структуры это модель данных, на их основе, вам нужно создать модель представления, где объекты будут представлены в виде классов, в которых будет определен соответствующий интерфейс.
Пишите программу правильно и тогда у вас не будет возникать таких бредовых проблем.
...
Рейтинг: 0 / 0
DataGrid.GetBindingExpression().UpdateTarget не работает
    #39519893
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesПишите программу правильно и тогда у вас не будет возникать таких бредовых проблем.
я в спойлер зарыл ключевую мысль:
Я в курсе про INotifyPropertyChanged и прочее.
Я сейчас иду по учебнику и автор обозначил проблемы отсутствия "обратной связи" при изменении свойств и под конец главы предложил "грубое решение" - UpdateTarget, а в дальнейших главах будет рассматриваться более правильный подход.
Я не пишу коммерческое приложение. Изучаю, и по мере изучения возникают вопросы. Ответы ищу в и-нете, если не нахожу, то пишу здесь
...
Рейтинг: 0 / 0
DataGrid.GetBindingExpression().UpdateTarget не работает
    #39519927
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласен,

Код: c#
1.
ProjectList.GetBindingExpression(DataGrid.ItemsSourceProperty).UpdateTarget();


такой способ обычно используют для Binding'а, в котором задано
UpdateSourceTrigger=Explicit
или когда задан режим обновления однонаправленного обновления
...
Рейтинг: 0 / 0
DataGrid.GetBindingExpression().UpdateTarget не работает
    #39519983
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, понял, спасибо!))
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DataGrid.GetBindingExpression().UpdateTarget не работает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]