繁体   English   中英

我该怎么做才能让我的 userControl 在验证后消失?

[英]How can I do that my userControl disappears when is validated?

我正在按照这里的一些说明进行操作:

WPF Window 返回值

我在 window 中展示了一个用户控件。 用户控件包含几个控件,当验证时(我的意思是,用户输入了所有数据)我需要显示另一个用户控件。

我正在使用像容器一样的边框。

这是一种方法。 我不知道这是最好的方式,但我也不知道这种设计 UI 的方式是否一开始就那么好。 例如,如果当我将有效数据放入其中时,我的控件消失了,如果我意识到我犯了错误,我该如何取回它? 向导有一个“返回”按钮是有原因的。

首先,创建一个基础视图 model class 公开 boolean IsValid属性。 (在我的示例中,我将其称为ValidatingViewModelBase 。)您的每个视图都将使用从该 class 派生的视图 model。 在每个视图 model 中,一旦所有属性都有效,将IsValid设置为 true。

接下来,像在任何 MVVM 应用程序中一样,为每个视图 model 创建一个用户控件。 如果它们被设计成相同的大小,UI 会更有意义。

现在,创建一个视图 model 将这些视图模型的实例公开为属性(在我的示例中,它们称为Page1Page2等)并创建一个绑定到它的视图:

<Grid>
   <Grid.Resources>
      <Style x:Key="{x:Type ValidatingViewModelBase}"> 
         <Setter Property="Visibility" Value="Visible"/>
         <Style.Triggers>
            <DataTrigger Binding="{Binding IsValid}" Value="True">
               <Setter Property="Visibility" Value="Hidden"/>
            </DataTrigger>
      </Style>
   <local:UserControl4 DataContext="{Binding Page4}"/>
   <local:UserControl3 DataContext="{Binding Page3}"/>
   <local:UserControl2 DataContext="{Binding Page2}"/>
   <local:UserControl1 DataContext="{Binding Page1}"/>
</Grid>

(这假定网格的DataContext已经设置。)

这是如何工作的: Grid在屏幕上的相同空间中显示控件,从后到前排序。 由于它们的大小相同,并且它们是不透明的,因此只有最后一个呈现出来是可见的。

当在Page1视图上设置IsValid属性时,样式将其Visibility更改为Hidden 现在第 2 页可见。 这一直持续到所有四个页面都有效为止。 由于我们将Visibility设置为Hidden ,而不是Collapsed ,因此即使在所有四个页面都不可见之后, Grid仍然保持相同的大小。

我还没有测试过这个,所以我不知道你在焦点问题上会有多糟糕。 当第 1 页变得不可见时,您可能希望第 2 页上的第一个控件获得键盘焦点。 您可能需要查看焦点概述中关于逻辑焦点的讨论,以了解如何处理此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM