【问题标题】:WPF Bind to DependencyProperty of another Object?WPF绑定到另一个对象的DependencyProperty?
【发布时间】:2011-01-06 12:20:26
【问题描述】:

我正在开发一个类似于 visio 的 WPF 应用程序。我希望能够对图表中的一些项目进行逻辑分组,每个项目都是一个 UIElement,并在组级别控制某些行为(即可见性)。

我的第一次尝试是创建一个控件,称为 Group,其宽度和高度 = 0。我想通过其 group 属性为我的图表元素分配一个特定的“Group”,然后绑定某些 UIElement 属性到组值,如下:

<DiagramNode  
         Width="300" Height="300" 
         Visibility="{Binding RelativeSource={RelativeSource Self},Path=Group.Visibility}"
         > ... </DiagramNode >

虽然这不会引发绑定错误,但它也不起作用。更改组的可见性不会影响分配给该组的节点的可见性。据我所知,任何时候都没有出现错误,它只是不起作用。

有什么想法吗?我的方法可行吗?如果没有,任何人都有他们想建议的替代方案:)。我不是一个庞大的 UI 人,在服务层感觉更舒服,所以我愿意接受其他建议。

【问题讨论】:

    标签: wpf data-binding binding visibility relativesource


    【解决方案1】:

    问题可能在我的 DiagramNode 类的 Group 对象的属性声明中吗?

    Public Class DiagramNode
    ...
    Private _group As Group
    Public Property Group() As Group
        Get
            Return Me._group 
        End Get
        Set(ByVal value As Group)
            Me._group = value
        End Set
    End Property
    ...
    End Class
    

    【讨论】:

      【解决方案2】:

      如果通过调试器运行时应用程序的跟踪中确实没有绑定错误,那么问题可能出在更改通知中。您必须确保 Group 对象的 Visibility 属性在更改时提供更改通知。

      这通常通过在类上实现 INotifyPropertyChanged 来完成,并在 set 访问器中引发 PropertyChanged 事件(如果值实际更改)。

      【讨论】:

      • 感谢您的回复 Aviad。我确实相信我的 Group 对象为 Visibility 属性实现了 INotifyPropertyChanged,因为我的 Group 对象继承自 UserControl。你同意吗?
      • 它是否也确实在Visibility 属性设置器中引发了PropertyChanged 事件?这必须明确地完成。
      • UserControl NOT 实现了 INotifyPropertyChanged。但是,如果 Group 是 UserControl,则 Group.Visibility 是依赖属性,因此不需要引发更改通知来成为绑定源。您可能需要发布更多组定义以帮助诊断问题。
      • 感谢您的澄清 ITowloson 组定义很简单。 schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="schemas.microsoft.com/winfx/2006/xaml" Width="0" Height="0"> 部分公共类页面 Public Sub New() ' Windows 窗体设计器需要此调用。 InitializeComponent() ' 在 InitializeComponent() 调用之后添加任何初始化。 Me.Visibility = Windows.Visibility.Collapsed End Sub End Class
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2011-05-26
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      相关资源
      最近更新 更多