Рассмотрим следующие варианты использования
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.
Как лучше организовать такие связи ?