我有一个WPF UserControl,它托管另一个WPF UserControl,我已经制作了它们并公开了各种依赖项属性。现在我在两者中都有一个名为IsSelected的DP,我需要将IsSelected从内部UserControl绑定到外部USerControl的IsSelected,这样当外部UserControl用于Window或Page时,我可以在用户选择内部时通知用户控件。
这有意义吗?
更新:我已尝试使用Xaml Relative Source绑定,但我的内部控件被用户交换,这意味着Xaml绑定指向错误的UserControl。想象一下画中画视频控制,用户可以用小画面交换大画面,但它始终是驱动IsSelected属性的大画面。
所以我的XAML看起来像这样
... MainWindow.xaml
<Grid>
<MyControl1 />
</Grid>
... MyControl1.xaml
<Grid>
<MyControl2 x:Name="myControl2" />
</Grid>
当我作为单独的UserControls直接绑定它们时,每个控件上的DP属性都很好并且绑定正确,我只能弄清楚如何在内部将它们绑定在一起
在MyControl1背后的代码中,我尝试了以下内容的变体......
var bind = new Binding("IsSelected");
bind.Source = myControl2;
bind.Mode = BindingMode.TwoWay;
this.SetBinding(MyControl1.IsSelectedProperty, bind);
有没有人有任何想法?
干杯
戴夫
答案 0 :(得分:0)
只需在XAML中使用RelativeSource Binding
即可轻松完成。试试这个:
<Grid>
<ChildControl x:Name="myControl2" IsSelected="{Binding IsSelected, RelativeSource={
RelativeSource AncestorType={x:Type ParentControl}}}" />
</Grid>
更新&gt;&gt;&gt;
您已在代码中请求此Binding
...遗憾的是,我从未在代码中执行这些Binding
,因此我无法保证这是正确的,但它看起来对我来说是正确的:
Binding binding = new Binding("IsSelected");
RelativeSource relativeSource = new RelativeSource(RelativeSourceMode.FindAncestor);
relativeSource.AncestorType = typeof(ParentControl);
binding.RelativeSource = relativeSource;
SetBinding(ChildControl.IsSelectedProperty, binding);