我有一个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 :(得分: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);
}
}