因此,我创建了一个Singleton,用于跟踪整个应用程序中全局使用的ToolTip启用程序,但是当我尝试将其绑定到ToolTip时,它最初会绑定该值,但是当我更改ToolTip时启用程序值,绑定不会更新。
这是用于创建工具提示绑定的用户控件:
public partial class ViewTreeClass : UserControl {
private void addStuff() {
EnvironmentalVariables.Instance.ToolTipEnable = true;
Binding bind = new Binding() {
Source = EnvironmentalVariables.Instance.ToolTipEnable,
};
ToolTip x = new ToolTip();
x.Content = "This is text";
user.SetBinding(ToolTipService.IsEnabledProperty, bind);
user.ToolTip = x;
EnvironmentalVariables.Instance.ToolTipEnable = false;
// Executing the above statement changes the variable, but ToolTipService.IsEnabledProperty does not change to reflect EnvironmentalVariables.Instance.ToolTipEnable
}
}
这是实现INotifyPropertyChanged的Singleton:
public class EnvironmentalVariables : INotifyPropertyChanged {
private static EnvironmentalVariables instance = new EnvironmentalVariables();
public static EnvironmentalVariables Instance {
get {
if(instance == null) {
instance = new EnvironmentalVariables();
}
return instance;
}
}
private EnvironmentalVariables() { }
private bool tooltipEnable;
public bool ToolTipEnable {
get {
return tooltipEnable;
}
set {
if(tooltipEnable != value) {
tooltipEnable = value;
this.RaiseNotifyPropertyChanged("ToolTipEnable");
}
}
}
private void RaiseNotifyPropertyChanged(string property) {
if(PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
当我更改' EnvironmentalVariables.Instance.ToolTipEnable = false;'它将Singleton变量更改为' false'但它没有将ToolTipService.EnabledProperty更新为' false'和PropertyChanged始终为null。我错过了某处PropertyChanged的订阅吗?
Singleton和UC都在不同的名称空间/类文件中。
答案 0 :(得分:2)
问题在于第一次提取IMO,即创建绑定的方式。什么类型是user
?
将Instance
设为来源,将ToolTipEnable
设为路径(bind.Path = new PropertyPath("ToolTipEnable")
)。
并且您有理由使用ToolTipService.IsEnabledProperty
代替ToolTip.IsEnabledProperty
吗?我不确定这是这个技巧的好地方(但我可能错了,试试两个^^)。
您的单身人士错了(但不会导致问题)。我也纠正了你举办活动的方式:
public sealed class EnvironmentalVariables : INotifyPropertyChanged {
private static readonly EnvironmentalVariables instance = new EnvironmentalVariables();
public static EnvironmentalVariables Instance {
get
{
return instance;
}
}
private EnvironmentalVariables() { }
private bool tooltipEnable;
public bool ToolTipEnable {
get {
return tooltipEnable;
}
set {
if(tooltipEnable != value) {
tooltipEnable = value;
this.RaiseNotifyPropertyChanged("ToolTipEnable");
}
}
}
private void RaiseNotifyPropertyChanged(string property) {
var handler = PropertyChanged;
if(handler != null) {
handler (this, new PropertyChangedEventArgs(property));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
答案 1 :(得分:1)
我认为这与未设置DataContext
的{{1}}有关,因为我没有看到代码中的任何其他错误。尝试在ViewTreeClass
方法的开头将DataContext
设置为单例类。另外,尽管与你的问题相关,但我真的建议你在控件的XAML中执行你在部分类中所做的事情,因为以编程方式创建绑定通常会非常混乱。