2009-07-03 3 views
2

У меня есть пользовательский элемент Silverlight с двумя свойствами; Текст и идентификатор. Я создал DependencyProperties для них в соответствии с приведенным ниже кодом.Синхронное заполнение DependencyProperties настраиваемого элемента управления в Silverlight

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); } 
} 

В методе управления сначала заполняется идентификатор, а затем текст. Моя проблема заключается в том, что когда я привязываюсь к Text и Id на этом элементе управления, я хочу, чтобы их данные были заполнены синхронно, так что когда событие PropertyChanged срабатывает по любому свойству, у обоих из них есть обновленные данные.

В этот момент я поймаю, когда Идентификатор изменился, выполнил некоторую обработку, и, если необходимо, я установил текст в новое значение. Но как только этот OnChange Id завершился, метод управления продолжается и заполняет текст после того, как я уже изменил его на другое.

ответ

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); 
     } 
    } 
Смежные вопросы