更新源而不会失去焦点 - WPF Telerik RADDatePicker

时间:2011-02-27 12:17:21

标签: wpf telerik datepicker

我有一个Telerik RadDatePicker,我绑定到SelectedDate属性。我希望此控件在删除/删除控件中设置的默认日期时显示验证错误。我能够实现这一点,但问题是只有在按下Enter或我们在控件外部点击时才会出现验证错误。

有没有办法告诉RadDatePicker更新源而不移动焦点? (尝试过UpdateSourceTrigger = PropertyChanged,但它仍然没有工作)

3 个答案:

答案 0 :(得分: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 :(得分:1)

我现在可能有点晚了,但您可以使用RadDatePicker的CurrentDateTimeText属性

答案 2 :(得分:0)

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