簡體   English   中英

為什么INotifyPropertyChanged不起作用?

[英]Why doesn't the INotifyPropertyChanged work?

我使用Multibinding綁定了一些屬性,並使用INotifyPropertyChanged接口通知這些屬性的更改。但是可悲的是,似乎INotifyPropertyChanged無效。 PropertyChangedEventHandler“ PropertyChanged”始終為null。

問題:

答:能否請您告訴我為什么該事件為null?在我看來,應該為該事件設置一個默認方法PropertyChangedEventHandler,我錯了嗎?(已解決,謝謝!)

B.就像一些朋友說的那樣,我沒有使用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. 多重綁定(似乎效果很好。通過使用轉換器來計算受“ 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。 綁定將自動跟蹤這些屬性的更改。

在您綁定的任何地方設置Mode=TwoWay嗎?

您需要重寫OnPropertyChanged並檢查該屬性是否為您要查找的屬性。

protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
    if (e.Property == MyProperty)
    {
        // do something
    } 
    base.OnPropertyChanged(e);   
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM