【问题标题】:How to show different controls based on a condition in WPF?如何根据 WPF 中的条件显示不同的控件?
【发布时间】:2010-06-25 17:03:17
【问题描述】:

我基本上需要屏幕的一部分来显示“身份验证”框,如果您已登录,则它会显示您的用户名和“切换用户”按钮,但如果您未登录,它会显示只显示一个登录按钮。

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

谢谢

【问题讨论】:

    标签: wpf


    【解决方案1】:

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

    在您的 App.xaml 中放置

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

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

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

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

    【讨论】:

      【解决方案2】:

      拥有 2 个独立控件的选项实际上是我的首选。

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

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

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

      【讨论】:

      • 我正在使用 MVVM,所以也许第二条路线是最好的?
      • @Max:即使在 MVVM 中,我仍然会使用第一条路线。第二条路线的唯一优点是,在用户通过身份验证之前,您永远不必加载身份验证信息(该“窗格”的 ViewModel)。在第一种方法中,你需要一些东西——即使它是空的。不过,这两种方法都可以正常工作。
      • 我也更喜欢第一种方法。但是,您可能需要注意确保如果“不可见”控件中的绑定发生更改,它不会对“可见”控件(或下面的 ViewModel)的行为产生不利影响。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多