2011-03-23 44 views
3

我希望这是一个简单的方法。WPF:在数据绑定中使用表达式来评估真/假

在我的viewmodel我有一个数组可以是空的或最多可以有8个条目。我在屏幕上有8个按钮,并希望将按钮的可见性绑定到相应阵列中条目的存在。所以对于按钮2,如果myArray有多个条目,我会显示它。我希望我可以做这样的事情: -

{{Binding {myArray.Length > 1}, Converter={StaticResource BooleanToVisibilityConverter}} 

我的想法在于myArray.Length > 1将评估为真/假和值转换器会借此,把它变成一个知名度(显然有缺陷的!)。

但它不工作:(

这可能吗?

谢谢!

回答

4

您可以为此创建自定义转换器。

转换器将结合array.Length并接受一个int作为参数来定义数组中需要有多少项才能返回true,它会检查绑定是否为空,或者是否大于参数,并返回适当的可见性值

+0

他至少需要绑定到数组的长度,否则当项目添加/删除时不会正确更新。 – CodeNaked 2011-03-23 11:55:23

+0

@CodeNaked确实,我会更新我的答案。我习惯于对所有列表类型的DataBindings使用ObservableCollections,因为它在元素更改时自动通知UI – Rachel 2011-03-23 12:01:25

+0

完美 - 看起来它可以完成这项工作!谢谢瑞秋和CodeNaked! – Slippy 2011-03-23 13:14:04

2

不幸的是,这是不可能的。最容易做的事情是增加一个属性上的视图模型,是这样的:

public bool HasItems { 
    get { 
     return myArray.Length > 1; 
    } 
} 

你的目标需要实现INotifyPropertyChanged当myArray的改变提高PropertyChanged事件为“HasItems”。然后你会绑定到HasItems,而不是你的数组。

或者,您可以绑定到myArray.Length并构建自定义IValueConverter,将0转换为false并将任何正整数转换为true。