我有一个使用 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/