У меня есть Сетка , к которой свойство Visibility привязано к IsExpanded родительского Expander элемента управления.
Всякий раз, когда Grid.Visibility изменяется, я хочу, чтобы свойство ( MyProperty ) в DataContext (модель представления) изменялось соответственно.
Это мой XAML:
<Grid Visibility="{Binding IsExpanded, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}, Converter={StaticResource BoolToVisibilityConverter}}" />
Я попытался программно установить привязку в конструкторе вида, используя:
grid.SetBinding(VisibilityProperty, new Binding("MyProperty") { Source = DataContext });
Однако это просто заменяет привязку к Expander , уже установленному в XAML.
Я подумал о том, чтобы перевернуть это так, чтобы целью была моя модель представления, а источником была сетка (привязка к Visibility ) и превращение MyProperty в свойство зависимости. Но моя модель представления не является DependencyObject , поэтому я не могу этого сделать.
Я попытался использовать MultiBinding / MultiConverter привязка Сетка. Видимость до Расширитель. Расширение и MyProperty , но это не дает желаемого эффекта. MyProperty не изменяется на Grid.Visibility , когда Grid.Visibility обновляется в результате изменения Expander.IsExpanded .
Единственный вариант, который, кажется, работает, это использование присоединенного свойства к Grid , которое связывается с Expander.IsExpanded , а затем использует функцию обратного вызова для программного изменения Grid.Visibility. всякий раз, когда присоединенное свойство изменяется. Сетка. Видимость затем связывается с MyProperty . Это просто грязный способ сделать это, но я открыт для предложений.
Полагаю, то, что я пытаюсь сделать, это почти как двусторонняя привязка, в которой две привязки направлены в противоположные стороны, одна из которых является из свойством зависимости, а другая - в собственность CLR.
Спасибо за любую помощь, которая может быть оказана !!