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に値を設定します。