gpt4 book ai didi

c# - 为什么 INotifyPropertyChanged 不起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 20:36:08 26 4
gpt4 key购买 nike

我使用了Multibinding来绑定(bind)一些属性,并使用INotifyPropertyChanged接口(interface)来通知这些属性的变化。但遗憾的是,INotifyPropertyChanged似乎并没有起作用。 PropertyChangedEventHandler“PropertyChanged”始终为 null。

问题:

一个。你能告诉我为什么事件为null吗?在我看来,事件PropertyChangedEventHandler应该有一个默认方法,我错了吗?(已解决,谢谢!)

B.就像一些 friend 说的,我没有使用INotifyPropertyChanged再次尝试。但是目标的属性值似乎没有改变......


  1. 属性

    public static readonly DependencyProperty LeftOffsetProperty = DependencyProperty.Register("LeftOffset", typeof(double), typeof(NetworkTaskLable), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.AffectsRender));
    public static readonly DependencyProperty TopOffsetProperty = DependencyProperty.Register("TopOffset", typeof(double), typeof(NetworkTaskLable), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.AffectsRender));

    public double LeftOffset
    {
    get { return (double)GetValue(LeftOffsetProperty); }
    set { SetValue(LeftOffsetProperty, value); }
    }
    public double TopOffset
    {
    get { return (double)GetValue(TopOffsetProperty); }
    set { SetValue(TopOffsetProperty, value); }
    }
  2. 多重绑定(bind)(看起来效果不错。通过使用转换器计算受“TopOffset”和“LeftOffset”影响的位置)

    var multibinding = new MultiBinding() { Converter = new BeginAndStartDateToLeftConverter_NetworkTaskLable(), ConverterParameter = NetworkView };
    multibinding.Bindings.Add(new Binding("Start"));
    multibinding.Bindings.Add(new Binding("StartDate") { Source = NetworkView });
    multibinding.Bindings.Add(new Binding("LeftOffset") { Source = this });
    MainCanvas.SetBinding(LeftProperty, multibinding);
  3. INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;
    public void CallPropertyChanged(string PropertyName)
    {
    if (PropertyChanged != null)//It seems to be null all the time!!!And the properties'changes were never notified!!!
    PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
    }
  4. 通知变更

    SetValue(LeftOffsetProperty, moveAdorner.LeftOffset);
    CallPropertyChanged("LeftOffset");
    SetValue(TopOffsetProperty, moveAdorner.TopOffset);
    CallPropertyChanged("TopOffset");

最佳答案

您不需要为依赖属性实现 INotifyPropertyChanged。绑定(bind)将自动跟踪这些属性的变化。

关于c# - 为什么 INotifyPropertyChanged 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4989899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com