2014-04-01 129 views
2

我有目前是以下數據綁定配置一個XAML按鈕的IsEnabled屬性:WPF按鈕的IsEnabled檢查多個綁定

<Button Name="ThirdPartyPostoneButton" Content="Postpone" 
     Click ="postponeThirdPartyUpdatesButton_Click" Margin="5,5,0,0" 
     Height="25" IsEnabled="{Binding Item3.CanDefer}"/> 

我還需要添加一個檢查爲IsEnabled="{Binding Item3.InstallSourceExists}"(換句話說,這兩個標準必須爲了使按鈕被啓用而遇到)。我怎樣才能做到這一點?

+4

使用multibinding – thumbmunkeys

回答

4

兩個選項,我能想到的: -

  1. 使用MultiBinding加上檢查兩個值都是真正的自定義IMultiValueConverter

  2. 在「Item3」模型上公開一個新屬性,如果其他屬性都爲True,則返回true。這是一種更清潔的方法,並且意味着如果將來邏輯發生變化(例如,您需要包含第三個bool屬性),則不必觸摸您的XAML。

+0

我通常使用第二種方法,因爲你所指定的相同的原因。 –

0

使用multibinding這樣的:

<Button Name="ThirdPartyPostoneButton" Content="Postpone" Click ="postponeThirdPartyUpdatesButton_Click" Margin="5,5,0,0" Height="25" > 
    <Button.IsEnabled> 
    <MultiBinding Converter="{StaticResource MyCustomConvertor}"> 
     <Binding Path="Item3.CanDefer"/> 
     <Binding Path="Item3.InstallSourceExists"/> 
    </MultiBinding> 
    </Button.IsEnabled> 
</Button> 
+0

這是否需要一個IMultiValueConverter?或者是WPF做一些巧妙的事情,因爲它們都是布爾值,使轉換器不必要? –

+0

是的,你必須使用IMultiValueConverter。我已經更新了我的答案。 –