【发布时间】:2010-06-25 17:03:17
【问题描述】:
我基本上需要屏幕的一部分来显示“身份验证”框,如果您已登录,则它会显示您的用户名和“切换用户”按钮,但如果您未登录,它会显示只显示一个登录按钮。
我可以有两个完全不同的控件,将它们都放在屏幕上并将它们的可见性属性绑定到 IsAuthenticated,但我希望有一些好的建议可以找到更好的方法。
谢谢
【问题讨论】:
标签: wpf
我基本上需要屏幕的一部分来显示“身份验证”框,如果您已登录,则它会显示您的用户名和“切换用户”按钮,但如果您未登录,它会显示只显示一个登录按钮。
我可以有两个完全不同的控件,将它们都放在屏幕上并将它们的可见性属性绑定到 IsAuthenticated,但我希望有一些好的建议可以找到更好的方法。
谢谢
【问题讨论】:
标签: wpf
既然你提到了绑定可见性,我将展示我为解决类似问题所做的工作。
在您的 App.xaml 中放置
<Application.Resources>
<BooleanToVisibilityConverter x:Key="VisibilityOfBool" />
</Application.Resources>
对于您希望通过视图模型中的布尔属性控制可见性的每个控件,您只需执行此操作即可。
Visibility="{Binding IsEditable, Converter={StaticResource VisibilityOfBool}}"
这将根据IsEditable 切换控件的可见性。
【讨论】:
拥有 2 个独立控件的选项实际上是我的首选。
这样做的好处是可以让您彻底、轻松地测试您的两个控件。您可以根据 DataContext 中的任何条件轻松使用触发器来切换可见的控件。它干净、简单且相当优雅。
话虽如此,如果您想避免这种情况,还有其他选择。
例如,您可以将ContentPresenter 用于该“框”区域,并将其内容绑定到 DataContext 中简单定义为“对象”的属性。然后,您可以在运行时将其设置为经过身份验证与未经身份验证的单独类型。通过为每种类型指定一个 DataTemplate,WPF 将自动为您连接适当的控件。 (这基本上是一种 ViewModel-first MVVM 风格的方法。)
【讨论】: