WPF绑定通过?

时间:2014-06-13 11:17:35

标签: wpf binding user-controls

我有一个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);

有没有人有任何想法?

干杯

戴夫

1 个答案:

答案 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);