2014-06-13 66 views
0

我有一个WPF用户控件,托管另一个WPF用户控件,我已经做出并公开了各种依赖属性。现在我有一个名为IsSelected的DP,我需要将从内部UserControl的IsSelected绑定到外部USerControl的IsSelected,以便当在窗口或页面中使用外部UserControl时,可以在用户选择内部用户控件。WPF绑定通过?

这有道理吗?

更新:我试着用Xaml Relative Source绑定,但我的内部控件被用户交换,这意味着Xaml绑定指向错误的UserControl。考虑一个画中画视频控件,用户可以用小图片交换大图片,但它始终是驱动IsSelected属性的大图。

所以我的XAML看起来像这样

MainWindow.xaml ...

<Grid> 
    <MyControl1 /> 
</Grid> 

MyControl1.xaml ...

<Grid> 
    <MyControl2 x:Name="myControl2" /> 
</Grid> 

双方各控制工作的DP性能有很大的和当我作为单独的UserControls直接绑定到它们时,正确绑定,我只是可以解决如何将它们内部绑定在一起

在后面的代码为MyControl1我曾尝试以下变化...

var bind = new Binding("IsSelected"); 
bind.Source = myControl2; 
bind.Mode = BindingMode.TwoWay; 

this.SetBinding(MyControl1.IsSelectedProperty, bind); 

有没有人有什么想法?

干杯

戴夫

+0

你尝试像''在哪里设置了myControl1作为包含UserControl的'x:Name'? –

+0

嘿,总是有一条重要的信息遗漏了,对不起!内部控件通过鼠标点击控件与另一个交换。它是一个Picture-in-Picture控件,用户可以切换小视频和大视频。因此,Xaml绑定方法仅在用户交换控件之前有效。 –

回答

0

你可以做到这一点很容易使用,仅在XAML一个RelativeSource Binding。试试这个:

<Grid> 
    <ChildControl x:Name="myControl2" IsSelected="{Binding IsSelected, RelativeSource={ 
     RelativeSource AncestorType={x:Type ParentControl}}}" /> 
</Grid> 

UPDATE >>>

您已要求这Binding代码...不幸的是,我从来没有在代码中完成这些Binding S,所以我不能保证这是正确的,但看起来约我的权利:

Binding binding = new Binding("IsSelected"); 
RelativeSource relativeSource = new RelativeSource(RelativeSourceMode.FindAncestor); 
relativeSource.AncestorType = typeof(ParentControl); 
binding.RelativeSource = relativeSource; 
SetBinding(ChildControl.IsSelectedProperty, binding); 
+0

嗨,感谢您的回复,但我错过了一些关键信息并更新了问题。很抱歉想错过你。 –