2012-07-09 80 views
1

對不起,我只是不知道如何用一句話來解釋它。有兩個控件設置另一個控件的可見性

所以這裏是我的目標:我需要在我的ViewModel中有一個布爾值來定義控件(邊框)的可見性。

我知道我可以通過一個BooleanToVisibilityConverter實現這一點,但還有一點點。如果控件不可見,我想要顯示UI上的按鈕。一旦這個按鈕被按下,我想我的ViewModel中的布爾值爲TRUE,然後我希望控件可見,並且按下的按鈕將被摺疊。一旦該控件可見,我想要在最近可見的控件中的一個按鈕使控件摺疊,然後使原始按鈕可見。

基本上有兩個按鈕:1使可見(然後摺疊本身),另一個是摺疊它的容器,然後使第一個按鈕可見。

我想用MVVM來做所有這些,所以如果我可以避免代碼在我的視圖中,那將是理想的!

+1

你是如何處理按鈕點擊?一個ICommand在你的ViewModel上?如果是這樣,只需將布爾屬性設置爲與您調用的命令的「execute」方法相對應的true或false。例如,按下第一個按鈕(顯示邊框),並在viewModel的execute方法中,將布爾值設置爲TRUE。在您的XAML中,將邊框的可見性綁定到相同的布爾屬性,並像您已經建議的那樣使用BooleanToVisibiltyConverter。 – Thelonias 2012-07-09 19:43:38

+0

我會採取刺。是的,我在我的ViewModel中使用ICommand。我不需要某種OppositeBooleanToVisibility轉換器嗎?所以當我的國旗是真的,這意味着隱藏/摧毀其他控制? – Travyguy9 2012-07-09 19:47:39

+1

是的,你需要那個。您將在邊框上使用BoolToVisibility轉換器,並在邊框外的按鈕上使用相反的轉換器(用於啓動邊框可見性的按鈕) – Thelonias 2012-07-09 19:51:30

回答

1

由於您使用您的視圖模型個ICommand,這應該工作...假設你的命令是「ShowBorderCommand」和「HideBorderCommand」,你的viewmodel屬性是「ShowBorder」

<ConverterNamespace:BooleanToVisibilityConverter x:Key="BoolToVis"/> 
<ConverterNamespace:ReverseBooleanToVisibilityConverter x:Key="BoolToCollapse"/> 

<Border Visibility="{Binding ShowBorder, Converter={StaticResource BoolToVis}}"> 
    <Button Command="{Binding HideBorderCommand}"/> 
</Border> 

<Button Command="{Binding ShowBorderCommand}" Visbility="{Binding ShowBorder, Converter={StaticResource BoolToCollapse}}"/> 
+0

只是FYI,我用一個ICommand並傳入一個參數來顯示/隱藏。這樣我不需要兩個命令。 – Travyguy9 2012-07-09 20:15:19

+0

也適用。 – Thelonias 2012-07-09 20:16:33

1

WPF Converters libraryBooleanToVisibilityConverter,允許反向轉換,以及允許使用的Hidden代替Collapsed

<con:BooleanToVisibilityConverter x:Key="ReverseBooleanToVisibilityConverter" IsReversed="True"/> 
<Button Visibility="{Binding SomeProperty, Converter={StaticResource ReverseBooleanToVisibilityConverter}}"/> 
相關問題