[英]Why doesn't the INotifyPropertyChanged work?
我使用Multibinding綁定了一些屬性,並使用INotifyPropertyChanged接口通知這些屬性的更改。但是可悲的是,似乎INotifyPropertyChanged無效。 PropertyChangedEventHandler“ PropertyChanged”始終為null。
問題:
答:能否請您告訴我為什么該事件為null?在我看來,應該為該事件設置一個默認方法PropertyChangedEventHandler,我錯了嗎?(已解決,謝謝!)
B.就像一些朋友說的那樣,我沒有使用INotifyPropertyChanged再次嘗試。但是目標的屬性值似乎沒有改變。
性質
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); } }
多重綁定(似乎效果很好。通過使用轉換器來計算受“ 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);
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)); }
通知變更
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.