我想将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,因此不会发送通知事件。
提前致谢。
答案 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}}。尝试查看Window
,output window
将在那里。
作为一种解决方法,您可以使用binding failure error
前往窗口的RelativeSource
并与其相关的属性绑定 -
DataContext