有两个控件设置另一个控件的可见性

时间:2012-07-09 19:36:23

标签: wpf binding mvvm

对不起标题,我只是不知道如何用一句话解释它。

所以这是我的目标:我需要在我的ViewModel中有一个布尔值来定义控件(边框)的可见性。

我知道我可以使用BooleanToVisibilityConverter实现这一点,但还有一点。如果控件不可见,我想在我的UI上显示一个按钮。一旦按下该按钮,我希望我的ViewModel中的布尔值为TRUE,然后我希望控件可见,并且刚按下的按钮被折叠。一旦该控件可见,我想在最近可见的控件中使用一个按钮来使控件折叠,然后使原始按钮可见。

基本上,有两个按钮:1表示可见(然后折叠自己),另一个是折叠其容器,然后使第一个按钮可见。

我正在尝试用MVVM完成所有这些,所以如果我可以避免在我的视图中隐藏代码,这将是理想的!

2 个答案:

答案 0 :(得分:1)

我的WPF Converters library有一个BooleanToVisibilityConverter,允许进行反向转换,并允许使用Hidden代替Collapsed

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

答案 1 :(得分:1)

由于您在viewmodel上使用ICommands,这应该可以...假设您的命令是“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}}"/>