2010-08-17 142 views
2

我正在使用MVVM架構來開發WPF應用程序...WPF按鈕可見性

到目前爲止,一切都一直很順利。

我遇到了綁定可見性問題。我想盡量減少在代碼中編寫代碼,如果可以的話,但如果它是必需的,那麼我不介意這樣做。

我有一個ViewModel。這個模型公開了一個布爾和2個命令。一個連接命令,一個斷開連接命令和一個DeviceCurrentlyConnected Bool。

基本上我決定做2個按鈕,但有基於布爾值的按鈕可見性。

所以我很難與此。我很久以前就嘗試過觸發器的樣式。

<Button Visibility="Hidden" Content="{x:Static UIStrings:ClientStrings.DeviceBar_DisconnectCommandName}" VerticalAlignment="Center" HorizontalAlignment="Center" Height="{Binding ElementName=this.Content, Path=DesiredHeight}" Margin="10" Name="Disconnect" Command="{Binding DisconnectCurrentDeviceCommand}"> 
    <Button.Style> 
     <Style TargetType="Button"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding DataCotext.DeviceConnected, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" Value="True"> 
        <Setter Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

我無法讓樣式工作。

基本上我想要的功能是:

DeviceConnected =假: 顯示與內容連接按鈕和命令結合到ConnectCommand。

DeviceConnected = true: 顯示一個帶有內容斷開和命令綁定到DisconnectCommand的按鈕。

用於當沒有設備當前連接時顯示和綁定到連接設備的按鈕,以及綁定到斷開命令並且斷開單詞的設備連接時顯示按鈕。

+0

綁定意圖是「{綁定DataCotext.DeviceConnected ...}」還是一個錯字?即不是'{綁定DataContext.DeviceConnected ...}'。 – 2010-08-17 23:51:40

+0

你的權利。它應該是DataContext。我的真實代碼是正確的,但:P。 – 2010-08-25 21:52:04

回答

2

寫出一個布爾到能見度轉換器,然後在你的按鈕上使用轉換器。 Five minute recipe for a decent BoolToVisibilityConverter是一個很好的職位,瞭解如何創建/使用可見性轉換器。

我過去所做的是使用布爾到可見性轉換器,並將按鈕的IsEnabled屬性作爲參數傳遞給轉換器。由於該模型中的命令可以使用CanExecute方法取消/啓用該按鈕,因此可以使用IsEnabled屬性設置按鈕對轉換器的可見性。

1

您的觸發器不起作用的原因是該樣式被按鈕本身上的屬性覆蓋。

您可以使用轉換器新城藍精靈建議,或者你可以visibility屬性移動到樣式,以便觸發正常工作

只需添加:

<Style.Setters> 
    <Setter Property="Visibility" Value="Hidden" /> 
</Style.Setters> 

的風格,然後取下屬性。