Связка нескольких контролов через DataContext
От: Аноним  
Дата: 23.04.11 15:29
Оценка:
Рассмотрим следующие варианты использования
1) textbox + datagrid , вводим текст в textbox в гриде видим отфильрованную по некоторому запросу информацию
2) datagrid + datagrid , первый датагрид инициализируется по sql запросу при выборе элемента во второй датагрид загружается информация через запрос.

Предполагается что контролы ничего не знают друг о друге.
Есть некий контроллер который знает названия контролов и у него есть доступ к DataContext и информация о пути к данным через него.

Например для случая 1)

<Grid Name="filtervalue">
  <SomeUserControlBasedOnTextbox></SomeUserControlBasedOnTextbox>
</Grid>

<Grid Name="filtereddata">
 <SomeUserControlBasedOnDataGrid></SomeUserControlBasedOnDataGrid>
</Grid>


И у контроллера есть следующие данные

1) Name= "filtervalue", DataSource = "",
2) Name = "filterddata", DataSource="select a,b,c from table where a = @param1"

и данные о связке. Т.е. чтобы грид отобразил данные у контролера есть информация :
3) SourceName = "filtervalue", SourcePath = "SomeObject.Value" , TargetName = "filtereddata", TargetPath = "SomeObjects.Filter.Param1"

Т.е. контроллер ищет контрол FindByName, затем берет значение DataContext и получает некий объект который не является наследником DependencyObject ( связанно с тем что эти объекты могут работать только в одном потоке ). Это может быть либо ObservableCollection<> либо объект наследованный от INotifyPropertyChanged.

Соответственно по п.3. находим 2 датаконтекста, берем объекты которые им назначены, получаем в результате 2 объекта не DependencyObject, для которых нет метода SetBinding, а хотелось бы использовать именно гибкость Bindingа , в том числе чтобы не изобретать велосипед для путей TargetPath, SourcePath, а использовать как принято в Bindings.



Как лучше организовать такие связи ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.