wpf TabItem绑定IsEnabled

时间:2013-08-02 16:42:38

标签: wpf binding inotifypropertychanged tabitem isenabled

我想将IsEnabled的{​​{1}}属性绑定到我的代码中的数据。

e.g。我的TabItem定义如下

TabItem

我已经定义了一个继承自<TabItem Name="Tab1" Header="Tab1" IsEnabled="{Binding Path=Tab1Enabled, Mode=TwoWay}"> </TabItem> 的数据类,如下所示

INotifyPropertyChanged

然后我将class MyData : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string name) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(name)); } } public bool Tab1Enabled { get{ return m_tab1Enabled; } set { m_tab1Enabled = value; OnPropertyChanged("Tab1Enabled"); } } } 设置为我的数据成员。

DataContext

但是,当以编程方式设置Tab1Enabled属性时,PropertyChanged事件为null,因此不会发送通知事件。

提前致谢。

3 个答案:

答案 0 :(得分:1)

我猜您需要将m_bindinData更改为要绑定到的变量(m_myData)。我启动了VS2012并测试了你的代码。设置m_myData.Tab1Enabled = true;将标签设置为启用,并将m_myData.Tab1Enabled = false;设置为正确禁用。这是我的所作所为。

public partial class MyApp : Window
{
    MyData m_myData = new MyData();
    MyApp()
    {
        this.DataContext = m_myData;
        InitializeComponent();

        m_myData.Tab1Enabled = true;
    }
}

class MyData : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string name)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }
    public bool Tab1Enabled
    {
        get { return m_tab1Enabled; }
        set
        {
            m_tab1Enabled = value;
            OnPropertyChanged("Tab1Enabled");
        }
    }

    private bool m_tab1Enabled;
}

<TabControl>
    <TabItem Name="Tab1" Header="Tab1" IsEnabled="{Binding Path=Tab1Enabled}">
    </TabItem>
    <TabItem Name="Tab2" Header="Tab2">
    </TabItem>
</TabControl>

答案 1 :(得分:1)

这个怎么样?注意PropertyChangedEventHandler PropertyChanged = PropertyChanged; OnPropertyChanged方法中的行。

class MyData : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler PropertyChanged = PropertyChanged;
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    } 
    public bool Tab1Enabled
    {
        get{ return m_tab1Enabled; }
        set
        {
            m_tab1Enabled = value;
            OnPropertyChanged("Tab1Enabled");
        }
    }            
}

答案 2 :(得分:1)

您的TabItem可能无法继承DataContext的{​​{1}}。尝试查看Windowoutput window将在那里。

作为一种解决方法,您可以使用binding failure error前往窗口的RelativeSource并与其相关的属性绑定 -

DataContext