【发布时间】:2015-10-17 23:37:58
【问题描述】:
我不得不使用旧的 silverlight 应用程序,遇到了一段奇怪的代码。 viewmodel 有一个 List 依赖属性作为网格的绑定源。这个 DP 有一个默认值,一个在应用程序中全局使用的另一个 List。这用于在应用程序的不同部分之间轻松共享实体数据。
DependencyProperty MyEntitiesProperty = DependencyProperty.Register("MyEntities", typeof(List<Entity>), typeof(...), new PropertyMetadata(Global.Entities));
现在,当列表更改时(在用户操作上),全局列表会从数据库中重新填充,但从未明确设置 MyEntities。这不起作用:网格(绑定目标)永远不会改变。所以这是一个错误的解决方案。
我推测所有这一切背后的想法可能如下:如果您有一个具有给定值的 DP,并且您从未为其设置本地值,那么 DP 的有效值将是默认值。如果更改了“基础”默认值,则更改会反映在有效值中。
如果它有效,这是在独立视图模型之间共享数据的好方法,而无需摆弄属性更改事件等。
这里有什么问题?是对 DP 的工作方式有很大的误解,还是想法没问题而遗漏了一些实施细节?
如果有不清楚的地方请评论。
【问题讨论】:
-
您写道“全局列表是从数据库中重新填充的”,而我将其解读为“列表实例保持不变,仅删除项目并再次添加更新的项目”。我在这里错了吗?因为如果列表实例在应用程序生命周期内相同或创建新的列表实例,则存在很大差异。
-
Martin,我了解添加/删除项目和设置新项目参考之间的区别。它如何影响 DP 的绑定行为?在实际代码中,创建了一个新列表。
-
您的问题解决了吗?
标签: silverlight data-binding viewmodel dependency-properties