Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从变量将html内容加载到UWP WebView_C#_Webview_Uwp_Uwp Xaml - Fatal编程技术网

C# 如何从变量将html内容加载到UWP WebView

C# 如何从变量将html内容加载到UWP WebView,c#,webview,uwp,uwp-xaml,C#,Webview,Uwp,Uwp Xaml,我有一个UWP应用程序,其中视图包含一个WebView。 在我的ViewModel中,我有两个变量,一个包含URI,另一个包含HTML内容 我需要能够导航到URI或显示HTML内容,这取决于切换按钮的状态 我可以绑定WebView的Source属性来导航到URI,但我不知道如何在WebView中加载HTML内容 我知道有一个方法WebView.NavigateToString(string),但不知道如何从我的ViewModel调用它。我已经读到,您应该从视图的代码隐藏中调用它,但是我的视图无法

我有一个UWP应用程序,其中视图包含一个
WebView
。 在我的ViewModel中,我有两个变量,一个包含URI,另一个包含HTML内容

我需要能够导航到URI或显示HTML内容,这取决于切换按钮的状态

我可以绑定
WebView
Source
属性来导航到URI,但我不知道如何在
WebView
中加载HTML内容

我知道有一个方法
WebView.NavigateToString(string)
,但不知道如何从我的ViewModel调用它。我已经读到,您应该从视图的代码隐藏中调用它,但是我的视图无法看到我的ViewModel中的内容

显而易见的方法是从我的ViewModel中获取对
WebView
的引用,但我不知道如何做到这一点,这破坏了MVVM模式的分离

有人能提出解决办法吗

public类MainPageViewModel:INotifyPropertyChanged
{
//这些属性都是可观察的-忽略通知
//简而言之
公共bool UseUri{get;set;}
公共字符串HtmlContent{get;set;}
公共Uri WebUri{get;set;}
}
公共密封部分类主页面:第页
{
公共MainPageViewModel视图模型{get;}
公共主页()
{
this.InitializeComponent();
ViewModel=新的MainPageViewModel();
}
}

我知道有一个方法WebView.NavigateToString(string),但不知道如何从我的ViewModel调用它。我已经读到,您应该从视图的代码隐藏中调用它,但是我的视图无法看到我的ViewModel中的内容

对于这个场景,您可以参考blog来制作
webviewextension
,如下所示

public class MyWebViewExtention
{
    public static readonly DependencyProperty HtmlSourceProperty =
           DependencyProperty.RegisterAttached("HtmlSource", typeof(string), typeof(MyWebViewExtention), new PropertyMetadata("", OnHtmlSourceChanged));
    public static string GetHtmlSource(DependencyObject obj) { return (string)obj.GetValue(HtmlSourceProperty); }
    public static void SetHtmlSource(DependencyObject obj, string value) { obj.SetValue(HtmlSourceProperty, value); }
    private static void OnHtmlSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        WebView webView = d as WebView;
        if (webView != null)
        {
            webView.NavigateToString((string)e.NewValue);
        }
    }
 }
用法

<WebView x:Name="webView" local:MyWebViewExtention.HtmlSource="{x:Bind HtmlContent ,Mode=OneWay}">


基于以上内容,您可以创建两个
webview
,并使用ToggleButton属性绑定可见性。这不会破坏MVVM模式的分离

可能的重复:。不是重复-即显示本地文件,这是来自变量的内容,这是完全不同的,除非您建议我在每次需要显示内容时创建临时文件!好啊但也许这是唯一的解决方案,我不知道。嗨@Mog0,你测试过下面的解决方案吗。在你这边行吗?嗨@Nico Zhu,对不起,我还没有机会尝试,但它看起来确实像我需要的。这是一个私人项目,大部分时间是周末,但我一有机会就会尝试。谢谢@Nico,它似乎工作得很出色。我也非常感谢文档的链接,这样我可以更好地理解代码,以防我需要调整它或在其他地方这样做。回答得很好,希望我能投多一票☺