2009-07-03 43 views
2

我有一個帶有兩個屬性的Silverlight自定義控件;文本和ID。根據下面的代碼,我已經爲這些創建了DependencyProperties。在Silverlight中同步填充自定義控件的DependencyProperties

public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(LookupControl), new PropertyMetadata(NotifyPropertyChanged)); 
public static readonly DependencyProperty IdProperty = DependencyProperty.Register("Id", typeof(Guid?), typeof(LookupControl), new PropertyMetadata(NotifyPropertyChanged)); 

public event PropertyChangedEventHandler PropertyChanged; 

public static void NotifyPropertyChanged(object sender, DependencyPropertyChangedEventArgs args) 
{ 
    var control = sender as LookupControl; 
    if (control != null && control.PropertyChanged != null) 
    { 
     control.PropertyChanged(control, new PropertyChangedEventArgs("Text")); 
    } 
} 
public Guid? Id 
{ 
    get { return (Guid?)GetValue(IdProperty); } 
    set { SetValue(IdProperty, value); } 
} 

public string Text 
{ 
    get { return (string)GetValue(TextProperty); }  
    set { SetValue(TextProperty, value); } 
} 

在控制方法中,首先填充Id,然後填充Text。我的問題是,當我綁定到此控件上的文本和Id時,我希望他們的數據同步填充,以便PropertyChanged事件觸發任何屬性時,他們都有更新的數據。

在這個時候,我發現當Id已經改變,執行了一些處理,並且如果需要,我將Text設置爲一個新值。但是,一旦這個Id的OnChange已經完成,那麼控制方法會繼續並在我已經將其更改回其他內容之後填充文本。

回答

0

冷你保存的價值,只有當你有兩個?

private Guid? id; 
    private string text; 

    public Guid?Id 
    { 
     get { return id; } 
     set { 
      id = value; 
      TrySetValue(); 
     } 
    } 
    public string Text 
    { 
     get { return text; } 
     set { text = value; 
     TrySetValue()} 
    } 

    private void TrySetValue() 
    { 
     if (id != null && text != null) 
     { 
      SetValue(IdProperty, id); 
      SetValue(TextProperty, text); 
     } 
    } 
相關問題