2011-02-14 22 views
1

我用一个Multibinding来绑定一些属性,并使用INotifyPropertyChanged接口来通知这些属性的变化。但令人遗憾的是,似乎INotifyPropertyChanged不起作用。 PropertyChangedEventHandler“PropertyChanged”始终为空。为什么INotifyPropertyChanged不起作用?

问题:?

A.你能告诉我,为什么事件是空在我的印象中,应该是事件的默认方法PropertyChangedEventHandler,我错了

?(已解决,谢谢!)

B.就像一些朋友说,我再次尝试不使用INotifyPropertyChanged.But目标的属性值似乎没有改变......


  1. PROPERT IES

    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. Multibinding(好像用转换器用以计算由 “TopOffset” 和 “左偏移” 影响了地方工作well.By)

    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"); 
    
+2

你有依赖属性,但是这个接口被应用于通过setter中的函数调用的公共属性。 – vorrtex 2011-02-14 08:23:56

+0

谢谢你,vorrtex.But原因可能不会像你说的。我试图通知一个共同的属性,事件仍然为空... – Claw 2011-02-14 08:35:34

+0

Vorrtex意味着在你的情况下,绑定引擎监听依赖属性的变化在WPF中。所以没有PropertyChanged的处理程序。 – 2011-02-14 08:49:17

回答

3

您不需要为依赖项属性实现INotifyPropertyChanged。绑定会自动跟踪这些属性的更改。

0

您需要重写OnPropertyChanged并检查属性是否为您正在查找的属性。

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

设置Mode=TwoWay任何地方在你的绑定?