2013-01-03 58 views
1

假設我在WPF UserControl中有以下代碼。我想綁定到Asset.ChildProperty。目前無法正常工作,因爲我在資產屬性更改時沒有收到通知。如何安排事項,以便每當AssetID更改時通知都會觸發Asset屬性?WPF中的依賴屬性 - 我如何綁定它?

public static readonly DependencyProperty AssetIdProperty = DependencyProperty.Register("AssetId", typeof(string), typeof(GaugeBaseControl)); 

[Browsable(false), DataMember] 
public string AssetId 
{ 
    get { return (string)GetValue(AssetIdProperty); } 
    set { SetValue(AssetIdProperty, value); } 
} 

[DisplayName("Asset Item"), Category("Value Binding")] 
public AssetViewModel Asset 
{ 
    get { return Manager.Models.FirstOrDefault(m => m.Model.UniqueId == AssetId); } 
    set 
    { 
     if (value == null) 
      AssetId = string.Empty; 
     else 
      AssetId = value.Model.UniqueId; 
    } 
} 

回答

1

實施INotifyPropertyChanged和提高PropertyChanged事件時Asset變化(setter方法)。

+0

那麼在DependencyObject上實現它有什麼利益衝突嗎? – Brannon

+2

而不是DependencyOjbect的重點,你不必實現該接口? – Brannon

+0

DependencyObject允許您定義可用作綁定目標的DependencyProperties。它沒有做任何改變通知的方式。你必須添加這個。查看我的答案以獲取更多信息。 –

2

您可以指定時的DependencyProperty變化值,並提高從回調方法PropertyChanged事件在DependencyPropertyPropertyMetadata回調方法被調用。

public class MyClass : DependencyObject, INotifyPropertyChanged 
{ 

    public MyClass() 
    { 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public bool State 
    { 
     get { return (bool)this.GetValue(StateProperty); } 
     set { this.SetValue(StateProperty, value); } 
    } 

    public static readonly DependencyProperty StateProperty = 
     DependencyProperty.Register(
      "State", 
      typeof(bool), 
      typeof(MyClass), 
      new PropertyMetadata(
       false, // Default value 
       new PropertyChangedCallback(OnDependencyPropertyChange))); 

    private static void OnDependencyPropertyChange(
     DependencyObject d, 
     DependencyPropertyChangedEventArgs e) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(d, 
       new PropertyChangedEventArgs(e.Property.Name); 
     } 
    } 
} 

如果從State屬性的setter提高PropertyChanged事件,然後在屬性綁定,因爲綁定調用StateProperty直接,不State他們將不會觸發。