Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
DataGrid.GetBindingExpression().UpdateTarget не работает
|
|||
|---|---|---|---|
|
#18+
У меня есть DataGrid с названием ProjectList. Код: xml 1. 2. 3. Источник - банальный массив структур (две строки и число {get;set;}) Так работает: Код: c# 1. 2. Но вот так не работает: Код: c# 1. Вопрос - почему? Для тех, кто скажет, что писать надо вообще иначе Я в курсе. INotifyPropertyChanged и прочее. Я сейчас иду по учебнику и автор обозначил проблемы отсутствия "обратной связи" при изменении свойств и под конец главы предложил "грубое решение" - UpdateTarget, а в дальнейших главах будет рассматриваться более правильный подход. Но это решение не работает, поэтому и вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 12:50 |
|
||
|
DataGrid.GetBindingExpression().UpdateTarget не работает
|
|||
|---|---|---|---|
|
#18+
т.е. я изменяю одно из полей в одной из строк программно. Соответственно, таблица об этом не знает. И потом с помощью вот этой вот строки пытаюсь обновить таблицу - но она не обновляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 12:51 |
|
||
|
DataGrid.GetBindingExpression().UpdateTarget не работает
|
|||
|---|---|---|---|
|
#18+
капец писал развернутый ответ и всё удалилось, просто жесть. так как второй раз мне лень писать напишу коротко. Почему не обновляется? Потому, что если свойству зависимости присвоить объект, а затем снова его присвоить, то 2 раз значение обновится и обновление не сработает, так как перед обновлением свойства зависимости оно проверяет, не тот ли самый объект в него передается, который уже был ему присвоен. Обновляете вы через Binding или локально или еще как, посрать совершенно. Во вторых, "ProjectList.ItemsSource = ProjectCollection" это нефига не связывание, а обычное присвоение значения, которое будет локальным и ни каким binding'ом тут даже не пахнет Если вам нужно обновить значение в ячейке, после обновления свойства у элемента коллекции ProjectCollection, то существуют 4 дерьмовых способа для вашего случая, которыми я лично не стал бы пользоваться. а) клонировать коллекцию и присвоить к свойству зависимости ItemsSource этого клона, так как после клонирования коллекции указатель будет другой, свойство зависимости корректно обновится и DataGrid перестроится. б) присвоить свойству зависимости ItemsSource значение null, а затем старое значение, после чего DataGrid перестроится дважды в) получить представление коллекции ProjectCollection через CollectionViewSource.GetDefaultView(IEnumerable) затем вызвать у этого представления метод Refresh или возбудить событие Reset. Тогда DataGrid перестроится. в) можно обновить все свойства через вызов NotifyPropertyChanged(string.Empty), но обновятся они только в рамках текущего класса, то есть нужно будет переопределить класс коллекции. Все выше перечисленные методы дерьмовые. Ваша проблема в архитектуре приложения. Ваши структуры это модель данных, на их основе, вам нужно создать модель представления, где объекты будут представлены в виде классов, в которых будет определен соответствующий интерфейс. Пишите программу правильно и тогда у вас не будет возникать таких бредовых проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 14:19 |
|
||
|
DataGrid.GetBindingExpression().UpdateTarget не работает
|
|||
|---|---|---|---|
|
#18+
Roman MejtesПишите программу правильно и тогда у вас не будет возникать таких бредовых проблем. я в спойлер зарыл ключевую мысль: Я в курсе про INotifyPropertyChanged и прочее. Я сейчас иду по учебнику и автор обозначил проблемы отсутствия "обратной связи" при изменении свойств и под конец главы предложил "грубое решение" - UpdateTarget, а в дальнейших главах будет рассматриваться более правильный подход. Я не пишу коммерческое приложение. Изучаю, и по мере изучения возникают вопросы. Ответы ищу в и-нете, если не нахожу, то пишу здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 14:32 |
|
||
|
DataGrid.GetBindingExpression().UpdateTarget не работает
|
|||
|---|---|---|---|
|
#18+
хорошо я согласен, Код: c# 1. такой способ обычно используют для Binding'а, в котором задано UpdateSourceTrigger=Explicit или когда задан режим обновления однонаправленного обновления ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2017, 15:19 |
|
||
|
|

start [/forum/topic.php?fid=21&msg=39519811&tid=1440501]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
59ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 9ms |
| total: | 136ms |

| 0 / 0 |
