我想我可以通过创建UserControl来简化和整合一些代码。为了测试我的理论,我选择了一个非常简单的前景。基本上,在几乎每个屏幕上,我都会公开一个控件,让管理员可以选择他们正在处理的租户。 (非管理员分配了租户,但没有看到此功能。)
所以我创建了一个用户控件,坚持MVVM模式,它有自己的viewmodel。 viewmodel将租户列表和SelectedTenant属性公开给UC。视觉方面基本上只是一个列表框。 UC还公开了一个名为SelectedTenant的依赖属性,它可以绑定到父控件或窗口中的属性。
正如许多其他人所查询的那样,缺失的链接以某种方式将UC公开的依赖属性连接到下面的ViewModel,以便当用户选择租户时,viewmodel的SelectedTenant属性被设置并且然后传播到UC的DP,然后触发父控制,或许通过它与UC DP的绑定采取一些行动。
我还没有看到任何可以解释"正确"接近这个的方法。大多数帖子建议使用父datacontext,或者基本上放弃UC的MVVM。
看看我的代码,对我来说,似乎一个非常简单的方法是在DP getter和setter中包含代码,用于读取或写入UC的viewmodel值。然后我看到一篇帖子说你永远不应该这样做,但没有解释为什么。所以我想问为什么这不被认为是一种有效的方法。