|
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&fpage=7&tid=1440501]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
95ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 238ms |
total: | 431ms |
0 / 0 |