【发布时间】:2018-07-09 10:00:53
【问题描述】:
在创建包含动态内容的布局时,我经常这样做:
<Grid Visibility="{Binding IsLastSelectedItem, Converter=...}" >
<Grid Visibility="{Binding IsStatisticAvailable, Converter=...}" >
<TextBlock Visibility="{Binding HasStatistic, Converter=...}"
Text="{Binding Statistic}" />
</Grid>
</Grid>
这里的 2 个容器仅用于显示基于多个条件的内容,它是 3 个绑定与逻辑 AND 结合。
使用 MVVM 可以创建单个属性并直接绑定到它:
public bool ShowStatistic => IsLastSelectedItem && IsStatisticAvailable && HasStatistic;
但这并不总是可能的/容易的,并且有缺点。我必须监视所有 conditional 属性的变化并为结果属性发出通知。如果条件属性之一是静态的或特定于视图的,那么添加事件处理程序、订阅/取消订阅等以使其在视图模型和/或上升通知中可用是不可避免的麻烦。
昨天在 SO 的帮助下,我创建了 nice control 来添加动态内容。它有一个 bool 依赖属性来显示/隐藏其内容。现在我正在考虑如何避免为多个绑定嵌套多个此类控件,如上例所示。
问题:管理用于创建具有动态内容的布局的多重绑定的最佳(可重复使用、易于使用、简短、清晰)方法是什么?我可能缺乏合适的词来找到类似的问题。
我可以想到多重绑定和转换器。可重复使用的?一定不行。还是不行?
我可以考虑创建具有多个 bool 属性的自定义 容器 (MyGrid),由多个绑定和其他一些属性用于指定表达式:AND、OR 等.
也许我遗漏了一些明显而简单的东西?
【问题讨论】:
标签: c# wpf layout mvvm binding