2011-03-23 57 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。