如何根据WPF中的条件显示不同的控件?

时间:2010-06-25 17:03:17

标签: wpf

我基本上需要屏幕的一部分有一个“身份验证”框,如果你已经登录,那么它会显示你的用户名和一个“切换用户”按钮,但是如果你还没有登录,那么只显示一个登录按钮。

我可以有两个完全不同的控件,将它们都放在屏幕上并将它们的可见性属性绑定到IsAuthenticated,但我希望有更好的建议可以提供更好的方法。

由于

2 个答案:

答案 0 :(得分:9)

由于你提到绑定可见性,我将展示我为解决类似问题所做的工作。

在你的App.xaml put

<Application.Resources>
    <BooleanToVisibilityConverter x:Key="VisibilityOfBool" />
</Application.Resources>

对于您希望通过视图模型中的布尔属性控制可见性的每个控件,您只需执行此操作即可。

Visibility="{Binding IsEditable, Converter={StaticResource VisibilityOfBool}}"

这将根据IsEditable切换控件的可见性。

答案 1 :(得分:3)

您选择使用2个独立控件实际上是我的首选。

这样做的好处是可以让您彻底,轻松地测试两个控件。您可以根据DataContext中的任何条件轻松使用触发器切换哪个控件可见。它干净,简单,相当优雅。

话虽如此,如果你想避免这种情况,还有其他选择。

例如,您可以对该“框”区域使用ContentPresenter,并将其内容绑定到DataContext中的一个属性,该属性简单地定义为“对象”。然后,您可以在运行时将其设置为经过身份验证和未经身份验证的单独类型。通过为每种类型指定DataTemplate,WPF将自动为您连接适当的控件。 (这基本上是ViewModel-first MVVM风格的方法。)