【问题标题】:How to Press a button in the view using ViewModel如何使用 ViewModel 在视图中按下按钮
【发布时间】:2016-11-10 21:16:07
【问题描述】:

我是 WPF 新手,我了解 ViewModel 与 View 没有任何通信。我试图在我的应用程序中遵循 MVVM 模式,我想使用 ViewModel 在视图中按下一个按钮。例如:成功登录后,我想在视图中显示一个特定的网格。这也可以通过按下“X”按钮来完成。当“X”按钮获得焦点时,它将显示以下网格。

        ..<Grid.Style>
            <Style TargetType="Grid">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsFocused, ElementName=X}"
                             Value="False">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </DataTrigger>
                 <Style.Triggers>
            </Style>
        </Grid.Style>..

鉴于这种情况,如何使用 ViewModel 显示此网格?

任何帮助将不胜感激。

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

    您可以通过执行绑定到按钮的CommandICommand 类型的命令)来“按下”按钮。这不会给出按钮被按下的任何视觉指示,但在背景中会产生相同的效果。您还可以将属性绑定到网格的IsFocused 属性,通过更改 ViewModel 中的属性来切换可见性。

    【讨论】:

    • 感谢您的回答。您是说按钮的 IsFocused 属性吗?如果是,按钮上没有 IsFocused 属性。我尝试使用 Focusable,但它不起作用。你知道我做错了什么吗?
    • 是的,我的意思是按钮的IsFocused。当您更改值时,更改 ViewModel,它将触发您在网格上的数据触发器,因为它绑定到“X”按钮的IsFocused。然而,Focusable 只是一个属性,它告诉您一个元素是否可以被聚焦。
    【解决方案2】:

    您可以将按钮的 IsFocused 属性绑定到视图模型上的属性。一旦用户成功登录,将视图模型中的 IsFocused 属性设置为适当的值。

    在 MVVM 中,ViewModel 是 View 的状态。您声明“ViewModel 与 View 没有任何通信”是不正确的。 View 和 ViewModel 通过绑定“交谈”。 WPF 中内置的绑定引擎非常强大,它不仅可以让您绑定到可视化树中的不同元素,还可以绑定到 DataContext 上的公共属性。

    有关如何从代码中设置 IsFocused 属性,请参阅相关问题 - Related Question

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多