2011-02-27 126 views
1

我有一个Telerik RadDatePicker,我绑定到SelectedDate属性。我希望此控件在控件中设置的默认日期被删除/删除时显示验证错误。我能够实现这一目标,但问题在于验证错误仅在按下Enter或当我们在控件外单击时才会发生。更新源不丢失焦点 - WPF Telerik RADDatePicker

有没有办法让RadDatePicker在不移动焦点的情况下更新源代码? (尝试UpdateSourceTrigger = PropertyChanged,但它仍然没有工作)

回答

1

您可以使用行为,捕获无论(击键,值更改等)和强制数据绑定更新。

我写了一个类似的Silverlight的TextBox,因为在Silverlight中,你不能像WPF一样更改UpdateSourceTrigger。

您可以使用下面的代码,并进行必要的调整:

public class TextBoxUpdateBehavior : Behavior<TextBox> 
{ 
    public TextBoxUpdateBehavior() 
    { 
    } 

    protected override void OnAttached() 
    { 
     base.OnAttached(); 
     AssociatedObject.TextChanged += AssociatedObjectOnTextChanged; 
    } 

    private void AssociatedObjectOnTextChanged(object sender, TextChangedEventArgs args) 
    { 
     var bindingExpr = AssociatedObject.GetBindingExpression(TextBox.TextProperty); 
     bindingExpr.UpdateSource(); 
    } 

    protected override void OnDetaching() 
    { 
     base.OnDetaching(); 
     AssociatedObject.TextChanged -= AssociatedObjectOnTextChanged; 
    } 
} 
1

我可能是有点晚了,但你可以使用RadDatePicker

0

的CurrentDateTimeText属性来延长zish的回答,我用RadDatePicker的SelectedDate属性绑定到我的VM的DateTime? SelectedDate属性没有在绑定中设置验证。在绑定中,我使用RadDatePicker的CurrentDateTimeText属性绑定到我的VM的字符串SelectedDateText属性,其中ValidatesOnErrors = True。然后,在VM中,我验证了这个!String.IsNullOrEmpty(SelectedDateText)。这给了我想要的行为,而不需要行为。