2009-07-03 1 views
2

私はSilverlightカスタムコントロールを2つのプロパティで持っています。テキストと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が変更されたときに処理を実行し、必要に応じてテキストを新しい値に設定します。しかし、一度このIdのOnChangeが終了すると、コントロールメソッドは続行され、既に別のものに変更された後にTextに値を設定します。

答えて

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); 
     } 
    } 
関連する問題