关于x:Bind的一个问题

最近在给OpenWeen后面的代码做一些调整,让他看起来会好一些,比如用NotifyTaskCompletion<T>代替之前糟糕的数据初始化过程,在这里就遇到一个问题,很明显数据绑定要绑定到NotifyTaskCompletion<T>.Result,一开始一切都没什么问题,但是当要刷新重新加载的时候,问题就出来了。

NotifyTaskCompletion<T>对象被重新赋值之后,同样是Mode=OneWay,x:Bind仍然没有进行数据更新,仍然绑定的是原来对象的Result,而Binding是能够很好的更新。

在简单分析了一下生成的.g.cs文件之后,发现一个很有意思的地方,生成的,在属性被改变后,会调用Update_XXX,然后调用UpdateChildListeners_XXX,在UpdateChildListeners_XXX里面会试图与一个cache进行比较,如果不相等,删除cache的PropertyChanged事件,并更新cache和注册新对象的PropertyChanged事件,如果相等,什么都不做。

以上都是废话,下面这句是最关键的:

Bug Studio 2015 Update 3在生成.g.cs的时候没有调用UpdateChildListeners_XXX,所以导致了这个问题

好了,手动加入之后一切正常……

看来以后写程序前需要看看黄历,今天适不适合打开Bug Studio

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据