[英]Can I change a dependency property as a direct result of updating the source object of the binding of that dependency property in C#/Silverlight?
我在C#/ Silverlight中有一个自定义datepicker元素,其datetime属性绑定到source属性。 当我通过日期选择器更改日期时,它会正确更新source属性,但有时,由于它是无效的日期,因此我需要立即将source属性设置回其先前的值,并使更改反映回UI。 我能够正确设置源对象,然后正确地对其进行重置,但是我无法设法将日期选择器更改回其原始日期。 请注意,我并不是说格式无效的无效日期,而是基本上该日期已被“采用”。
我认为问题在于我正在尝试在自定义datepicker上设置依赖项对象,而该对象正处于从上一个set操作中触发其绑定的过程中。 需要说明的是:在用户界面中更改了日期选择器,这将更新自定义日期选择器中的依赖项对象,这将触发绑定,并更新源属性,这将导致源属性将自身设置回其先前的值,从而无法设置依赖项对象再次出现,因为它仍然位于用户在UI中选择的值的中间。
是否可以将依赖对象设置为新的东西,并将其作为由设置引起的一系列事件的一部分? 有什么方法可以正确实现此目的,或者以其他方式解决此问题? 我可能会误诊我的问题吗?
自定义datepicker元素基本上是一个标准的datepicker,并包装有其他一些UI元素,但是我认为如果只是标准datepicker,我也会遇到同样的问题。
您可以尝试使用Dispatcher.BeginInvoke()来延迟重新调整source属性的代码片段的执行:
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
sourceProperty = newValue;
});
另外,您可能要考虑使用数据验证的内置功能来代替上述方法。
您可以使用类似以下的内容(在视图模型中):
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/zh-cn/library/cc278072(VS.95).aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.