我有一个使用MVVM模型的WPF项目。
在我的视图中,我设置了一个名为 myWebBrowser 的隐形WebBrowser
,用于在网上执行操作(似乎是我动态创建WebBrowser
时它没有按预期工作。)
在我的视图中,我还有一个按钮,当单击该按钮时,通常会启动在ViewModel中设置的void操作。没关系。我遇到的问题是,我想要做一些事情,例如:
myWebBrowser.Navigate(url)
myWebBrowser.LoadCompleted += WebBrowserLoaded;
并且基本上使用视图中的不可见WebBrowser
启动该过程。
我怎样才能实现这一点,因为ViewModel拒绝让我使用控件名来引用它?
答案 0 :(得分:1)
您可以创建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
属性的值。
答案 1 :(得分:0)
谢里丹的答案很完美,但您可能需要包括 xmlns attribute
如果您使用的是namespaces
:xmlns:Attached="clr-namespace:foo.my.namespace"