我有一个Grid,Visibility属性绑定到父Expander控件的IsExpanded 。
每当Grid.Visibility更改时,我希望DataContext (视图模型)上的属性( MyProperty )相应地更改。
这是我的 XAML:
<Grid Visibility="{Binding IsExpanded, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}, Converter={StaticResource BoolToVisibilityConverter}}" />
我尝试使用以下方式以编程方式在视图构造函数中设置绑定:
grid.SetBinding(VisibilityProperty, new Binding("MyProperty") { Source = DataContext });
但是,这只是替换了与已在 XAML 中设置的Expander的绑定。
我考虑过翻转它,以便目标是我的视图模型,而源是网格(绑定到Visibility)并将MyProperty变成依赖属性。但是,我的视图模型不是DependencyObject,所以我不能这样做。
我尝试使用MultiBinding / MultiConverter将Grid.Visibility绑定到Expander.IsExpanded和MyProperty,但这并没有达到预期的效果。当Grid.Visibility由于Expander.IsExpanded更改而更新时, MyProperty不会更改为Grid.Visibility。
唯一可行的选择是在Grid上使用绑定到Expander.IsExpanded的附加属性,然后在附加属性更改时使用回调函数以编程方式更改Grid.Visibility。Grid.Visibility然后绑定到MyProperty。这似乎是一种混乱的方式,但我愿意接受建议。
我想我想要做的几乎就像一个双管齐下的绑定,其中两个绑定方向相反,一个来自依赖属性,另一个来自CLR 属性。
感谢您提供的任何帮助!