2010-06-25 124 views
4

我基本上需要屏幕的一部分有一个“身份验证”框,如果您登录,那么它会显示您的用户名和一个“切换用户”按钮,但如果您未登录,它只是显示登录按钮。如何根据WPF中的条件显示不同的控件?

我可以有两种完全不同的控制,把两者在屏幕上,他们的可见性属性绑定到IsAuthenticated,但我希望有一些好的建议在那里为一个更好的办法。

谢谢

回答

8

既然你提到结合的知名度,我会告诉我做什么来解决类似的问题。

在你的App.xaml把

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

对于您希望通过您的视图模型的布尔属性,你可以简单地这样做是为了控制可见每一个控制。

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

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

+0

BooleanToVisibilityConverter ...这太酷了。 – mdisibio 2013-02-01 18:01:59

3

你有2个单独的控件的选项其实是我的第一选择。

这有让您彻底,很容易测试两个你控制的优势。您可以轻松使用触发器来根据DataContext中的任何条件切换哪些控件可见。它干净,简单,而且相当优雅。

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

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

+0

我使用MVVM所以也许第二条路线是最好的? – 2010-06-25 17:17:41

+0

@Max:即使在MVVM中,我仍会使用第一条路线。第二条路线的唯一优点是您无需为用户的身份验证加载认证信息(该“窗格”的ViewModel)。在第一种方法中,你需要那里的东西 - 即使它是空的。虽然这两种方法都很好。 – 2010-06-25 17:18:59

+1

我也更喜欢第一种方法。但是,如果绑定在“不可见”控件中发生变化,您可能需要小心谨慎,它不会对“可见”控件(或下面的ViewModel)的行为方式产生不利影响。 – 2010-06-25 18:30:29