如何绑定到ToolStripMenuItem的Enabled属性

时间:2012-05-31 14:31:16

标签: .net vb.net winforms binding

我正在尝试做MVP,我有一个视图特定的模型,演示者操作和视图绑定。演示者和视图之间没有其他连接(视图通过网关类型模式触发域模型的命令)。

正如您所猜测的,这使得能够绑定到任何对象的任何属性都非常重要。

我无法找到绑定到Enabled的{​​{1}}属性的正确方法。大多数控件都有ToolStripMenuItem属性,但是这个属性似乎缺少它。我没有在网上找到有关如何执行此操作的详细信息。它甚至可能吗?

2 个答案:

答案 0 :(得分:6)

我找到了答案here:创建一个实现IBindableComponent的自定义ToolStripMenuItem。

链接示例:

Public Class BindableToolStripMenuItem
    Inherits ToolStripMenuItem
    Implements IBindableComponent

    Private m_bindingContext As BindingContext
    Private m_dataBindings As ControlBindingsCollection

    <Browsable(False)> _
    Public Property BindingContext() As BindingContext
        Get
            If m_bindingContext Is Nothing Then
                m_bindingContext = New BindingContext()
            End If
            Return m_bindingContext
        End Get
        Set(value As BindingContext)
            m_bindingContext = value
        End Set
    End Property

    <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
    Public ReadOnly Property DataBindings() As ControlBindingsCollection
        Get
            If m_dataBindings Is Nothing Then
                m_dataBindings = New ControlBindingsCollection(Me)
            End If
            Return m_dataBindings
        End Get
    End Property
End Class

答案 1 :(得分:1)

我很乐意听取其他用户的意见,尤其是关于如何实现对Enabled的{​​{1}}属性的绑定...以下是我发现的内容远:

大多数用户控件都继承自ToolStripMenuItem,它们具有继承的System.Windows.Forms.Control属性。但是,DataBindings不会继承ToolStripMenuItem,因此您无法向Control集合添加绑定。不完全是一个令人满意的答案,但至少它解释了为什么这不可能以你做的典型方式做。