gpt4 book ai didi

c# - ViewModel 调用用户控件(Web 浏览器)的方法

转载 作者:行者123 更新时间:2023-12-03 10:35:29 25 4
gpt4 key购买 nike

我正在尝试在 中编程MVVM 我有以下用例:

  • 一个 TextBox的文本绑定(bind)到虚拟机中的一个属性
  • 一个 Button是命令绑定(bind)到中继命令
  • 当用户按下 Button ,网络浏览器的Navigate(url)方法被调用,URL 是 TextBox 中的文本。

  • 以上是我要创建的用例,但使用 可以实现 1 和 2 MVVM 设计模式,但我找不到调用浏览器的 Navigate() 的适当方法方法。首先,是否可以从VM调用控件的方法(如果有方法请告诉我)?在上述用例中,如果不可能,那么构建程序的适当方法是什么?

    谢谢

    最佳答案

    您可以执行以下操作:

  • 添加属性 MyUrl到您的 ViewModel
  • 绑定(bind)MyUrl到您的网络浏览器的Source房产

  • 确保属性实现 INotifyPropertyChanged .然后你的 Xaml:
    <WebBrowser Source="{Binding MyUrl}" />

    如果您真的想从 ViewModel 调用 UI 方法怎么办?

    例如,如果您确实遇到了绝对需要调用 UI 控件上的方法的情况,您可以连接 events在 ViewModel 上,然后您的 UI 注册到此事件并执行特定于 UI 的操作...

    虚拟机代码...
    //... some VM logic
    EpicNavigateEvent(url) // raise event, allowing UI to handle how

    在您 View 的代码隐藏中(这是一些 MVVM 纯粹主义者疯狂的部分),您可以注册该事件:
    myVm.Navigate += doSomeNavigation;
    ...
    public void doSomeNavigation(string url)
    {
    // call Navigate
    }

    我已经成功地将这种方法用于我们有一个 ViewModel 层和多种技术连接 View (WinForms、WPF 和 Asp.Net)的应用程序。

    如果您正在寻找更多 优雅 ,看看 User Interaction Patterns on MSDN .
    不过这个概念是一样的:在 VM 上调用一些东西,View 会适本地处理它。

    这种方法的常见场景是希望从 VM 向用户显示一条消息。你的虚拟机应该引发一个事件: ShowMyMessage("You're awesome") ,然后通知您的 UI 并对其进行处理: MessageBox.Show(msg)管他呢。

    只要您遵守规则,您就应该是金子:
  • ViewModel 应该 不是 关注UI代码
  • 浏览量必须 仅限 处理 ViewModel 提供的数据的呈现。
  • 不要过于复杂。 KISS ...
  • 关于c# - ViewModel 调用用户控件(Web 浏览器)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31514971/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com