【发布时间】:2012-04-13 07:06:03
【问题描述】:
我有一个 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。这似乎是一种混乱的方式,但我愿意接受建议。
我想我正在尝试做的几乎就像一个双管齐下的绑定,其中两个绑定方向相反,一个是 from 依赖属性,另一个是 to 一个 CLR 属性。
感谢您提供的任何帮助!
【问题讨论】:
标签: wpf dependency-properties multibinding attached-properties isoneway