c# - 通过绑定(bind)在鼠标单击时导航 WebBrowser

标签 c# wpf mvvm view webbrowser-control

我有一个使用 MVVM 模型的 WPF 项目。

在我的 View 中,我设置了一个名为 myWebBrowser 的不可见的 WebBrowser,用于在网络上执行操作(看起来当我创建 WebBrowser 动态地无法按预期工作)。

在我的 View 中,我还有一个按钮,单击该按钮通常会启动在 ViewModel 中设置的无效操作。没关系。我遇到的问题是我希望 void 做一些事件,例如:

myWebBrowser.Navigate(url)
myWebBrowser.LoadCompleted += WebBrowserLoaded;

基本上使用 View 中不可见的 WebBrowser 启动进程。

当 ViewModel 拒绝我使用控件名称来引用它时,我该如何实现这一点?

最佳答案

您可以创建一个 Attached Property 来为您执行此操作:

public static class WebBrowserProperties
{
    public static readonly DependencyProperty UrlProperty = DependencyProperty.RegisterAttached("Url", typeof(string), typeof(WebBrowserProperties), new UIPropertyMetadata(string.Empty, UrlPropertyChanged));

    public static string GetUrl(DependencyObject dependencyObject)
    {
        return (string)dependencyObject.GetValue(UrlProperty);
    }

    public static void SetUrl(DependencyObject dependencyObject, string value)
    {
        dependencyObject.SetValue(UrlProperty, value);
    }

    public static void UrlPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
    {
        WebBrowser webBrowser = dependencyObject as WebBrowser;
        if (webBrowser != null && GetUrl(webBrowser) != string.Empty)
        {
            webBrowser.Navigate(GetUrl(webBrowser));
            webBrowser.LoadCompleted += WebBrowserLoaded;
        }
    }

    public static void WebBrowserLoaded(object sender, NavigationEventArgs e)
    {
    }
}

然后你可以像这样使用它:

<WebBrowser Attached:WebBrowserProperties.Url="{Binding YourUrlProperty}" />

要更新内容,只需更改 YourUrlProperty 属性的值即可。

关于c# - 通过绑定(bind)在鼠标单击时导航 WebBrowser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18655360/

相关文章:

c# - WPF 窗口加载的等待屏幕

c# - 使用 AsParallel() 时无法获取与 Windows 应用程序关联的文件的文件图标

silverlight - MVVM:在(Silverlight)中管理与 TreeView 的多对多关系

windows-phone-7 - 列表框索引返回负值

c# - 登录时存储用户然后按需推送数据

c# - 在 C# 中使用字符和字符串

javascript - 如何在 C# 中检索字符串 formData js

c# - 无法使用删除命令

c# - 当我尝试从 WPF 中的 RichTextBox 手动删除图像时出现 InvalidOperationException

c# - 在 MVVM 中使用委托(delegate)更新 ObservableCollection?