2

MVVM モデルを使用した WPF プロジェクトがあります。

私のビューでは、ネット上でアクションを実行するために使用されるmyWebBrowserWebBrowserという名前の非表示を設定しました (動的に作成すると、意図したとおりに動作しないようです)。WebBrowser

ビューには、通常、クリックすると、ViewModel で設定された void アクションを起動するボタンもあります。それはいいです。私が抱えている問題は、そのボイドに次のようなイベントを実行させたいということです:

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

基本的WebBrowserに、ビューにある非表示を使用してプロセスを起動します。

ViewModel がコントロール名を使用して参照することを拒否しているため、どうすればこれを達成できますか?

4

3 に答える 3

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プロパティの値を変更するだけです。

于 2013-09-06T10:40:48.850 に答える