【问题标题】:WPF Binding pass through?WPF绑定通过?
【发布时间】:2014-06-13 11:17:34
【问题描述】:

我有一个托管另一个 WPF UserControl 的 WPF UserControl,我已经制作了这两个并公开了各种依赖项属性。现在我在两者都有一个名为 IsSelected 的 DP,我需要将内部 UserControl 中的 IsSelected 绑定到外部 USerControl 的 IsSelected 以便在窗口或页面中使用外部 UserControl 时,我可以在用户选择内部时收到通知用户控件。

这有意义吗?

更新:我已尝试使用 Xaml 相对源绑定,但我的内部控件被用户交换,这意味着 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);

有人有什么想法吗?

干杯

戴夫

【问题讨论】:

  • 您是否尝试过类似&lt;MyControl2 x:Name="myControl2" IsSelected="{Binding Path=IsSelected, ElementName=myControl1}"/&gt; 的方法,其中myControl1 在包含的UserControl 上设置为x:Name?
  • 嘿,总是有一条重要的信息遗漏了,对不起!通过鼠标单击控件,内部控件与另一个控件交换。它是一个画中画控件,用户可以切换小视频和大视频。所以 Xaml 绑定方法只在用户交换控件之前有效

标签: wpf binding user-controls


【解决方案1】:

您可以仅在 XAML 中使用 RelativeSource Binding 轻松做到这一点。试试这个:

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

更新>>>

您已在代码中请求此 Binding... 不幸的是,我从未在代码中执行这些 Bindings,因此我无法保证这是正确的,但它看起来对我来说是正确的:

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

【讨论】:

  • 您好,感谢您的回复,但是我错过了一些关键信息并更新了问题。很抱歉错过带领你。
猜你喜欢
  • 1970-01-01
  • 2011-01-31
  • 2011-09-12
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
相关资源
最近更新 更多