Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Rebind коллекции к гриду с конвертором колонки


Автор: jonie 26.7.2011, 08:33
Задача: есть INotifyPropertyChanged класс (далее INPC), экземпляр которого биндится например на TextBox.Text с использованием IValueConverter-а
Вопрос: как не делая 
Код

BindingOperations.GetBindingExpressionBase(myTextboxInstance, TextBox.TextProperty).UpdateTarget();

обновить UI элемент, изменяя значение INPC класса?

*) поясняю: если у нас будет биндится через конвертер, то INPC класс не сможет уведомить контрол о своем изменении, т.к. по сути "после конвертера" интерфейс INotifyPropertyChanged будет "утерян" для UI класса.

UPD: ошибся в названии темы, т.к. пока писал про грид придумал более простой случай (впрочем, для грида и его колонок это тоже справедливо)

Автор: jonie 26.7.2011, 09:55
вот тут http://marlongrech.wordpress.com/2008/08/03/my-wish-came-true-i-can-now-use-databinding-in-a-converterparameter/
что-то похожее нашел на то что мне надо...

Автор: jonie 26.7.2011, 11:56
Ребят, ну это же адЪ....

Конкретезирую мою ситуацию: у меня есть некий набор DTO объектов, которые содержат помимо "полезных данных" еще и ссылки на другие DTO объекты в виде int (ссылка на ключ). Например: сотрудник и ссылка на департамент. Мне нужны DTO, т.к. я передаю их через WCF. Т.е. у меня есть классы:
Код

//я не указываю, но использую вызов PropertyChanged в set-свойствах
class Emp : INotifyPropertyChanged
{
 public string Name {get;set;}
 public int DepartamentId {get;set;} //FK departament
...
}

class Departament : INotifyPropertyChanged
{
 public int DepartamentId {get;set;}  //key
 public string Name {get;set;}
}

У меня департаменты редко меняются - конечно, я хочу их на клиенте закешировать, что и делаю.
Но при изменении имени департамента я хочу чтобы юзер автоматом во всех гридах просмотра сотрудников (гриды вида имя_сотрудника, имя_департамента) увидел обновление (не качая справочник сотрудников, т.к. он не менялся).

Я как тупой эскимос исползовал IValueConverter, чтобы преобразовать DepartamentId {->Departament->} Departament.Name, а тут описанный в теме "косяк" (выделенная фигурными скобками часть у меня отсуствует в силу гридовых особенностей, где грид не может биндится на объект).

Ну или подскажите как мне применить каскадный биндинг (id->object->property), чтобы вся эта штука реагировала на INPC

Я нашел один неплохой (имхо) вариант - это под каждый грид такой рисовать декоратор (ака wrapper) (тоже наследний INPC), который обернет мой исходный объект, сохранит его интерфейс  и добавит нужные мне свойства.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)