我在C#/ Silverlight中有一个自定义的datepicker元素,其datetime属性绑定到source属性。当我通过日期选择器更改日期时,它会正确更新源属性,但偶尔,我需要将源属性立即设置回其先前的值,因为它是无效日期并且将该更改反映回UI。我能够正确设置源对象,然后正确地重置它,但我无法将datepicker更改回其原始日期。注意我并不是指格式无效的无效日期,基本上就是日期已经“被采用”。
我认为问题在于我正在尝试在自定义日期选择器上设置依赖项对象,而它正处于从最后一次设置操作触发绑定的过程中。为了澄清:在UI中更改了datepicker,它更新了自定义datepicker中的依赖项对象,该对象触发了绑定,后者更新了source属性,导致source属性将自身设置回其先前的值,该值无法设置依赖对象,因为它仍处于设置为用户在UI中选择的值的中间。
依赖对象是否可以设置为新的东西,作为设置它引起的事件链的一部分?有没有办法正确实现这个,或者以某种方式解决这个问题?我有没有机会误解我的问题?
自定义datepicker元素基本上是一个包含一些其他UI元素的标准日期选择器,但我相信如果它只是标准的datepicker,我会遇到同样的问题。
答案 0 :(得分:0)
您可以尝试使用Dispatcher.BeginInvoke()来延迟执行重新调整source属性的代码片段:
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
sourceProperty = newValue;
});
此外,您可能需要考虑使用the built-in capabilities of data validation而不是上述方法。
答案 1 :(得分:0)
你可以使用这样的东西(在视图模型中):
public DateTime Date
{
get { return _date; }
set
{
if (value [is _not_in_range_])
throw new Exception("Value is not in range");
_date = value;
}
}
示例:http://msdn.microsoft.com/en-us/library/cc278072(VS.95).aspx