【问题标题】:wpf mvvm .. access view elements in viewmodelwpf mvvm .. 访问视图模型中的视图元素
【发布时间】:2010-02-17 07:41:22
【问题描述】:

我正处于学习 wpf/mvvm 的阶段,因为我知道在 vm 中我们声明命令并将它们绑定到查看元素的事件,而不是在代码隐藏文件中这样做......我没有得到的是,我们将如何访问查看元素和事件参数。

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    您的 ViewModel 不会直接访问视图中的元素。这个概念是 View 将绑定到 ViewModel,而不是相反。所以;您的 ViewModel 将通过属性中设置的值告诉 View 要显示的内容。如果您的 View 需要显示某些内容,它将对提供此属性的属性进行数据绑定。

    命令将由 ViewModel 保存,您也可以直接绑定它们。如果您需要命令来更新 View 的值,这可以通过从命令中保存对必要 ViewModel 的引用来完成。 (持有命令的 ViewModel 可以例如在创建时将自己注入到命令中)。然后该命令可以告诉 ViewModel 更新一些东西,这将通过数据绑定反映在 View 中。

    对于 MVVM 模式的一般介绍,您可以查看几天前提出的这个问题:Learning MVVM for WPF

    【讨论】:

    • 无论如何感谢您提供的信息.. 但如果您回复有关对话框并提供一些 sn-p 以清除...谢谢男人
    • 对于基本数据绑定,您应该在这里找到答案:stackoverflow.com/questions/1153147/…。我现在很忙,但我会在今天晚些时候找时间在命令等上添加一些 sn-ps。
    • 你可以例如让您的命令告诉 ViewModel 生成对话框。对话框的响应可以设置为 ViewModel 中的值,View 将通过数据绑定获取它。
    • @stiank81:假设 ViewModel 命令需要显示一个对话框来询问用户问题,并设置 dialog.Owner,它需要来自视图的窗口句柄。您将如何处理这种情况?
    【解决方案2】:
    var v=(viewclassname)this.getview();
    

    然后你可以访问视图中的元素

    【讨论】:

    • 这与 MVVM 模式背道而驰,可能会产生比它解决的问题更多的问题。
    • ViewModel 只能通过 Bindings 连接到 View。如果你这样做,你还不如放弃 MVVM 并使用代码隐藏来编写所有内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多