C# 如何从变量将html内容加载到UWP WebView
我有一个UWP应用程序,其中视图包含一个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调用它。我已经读到,您应该从视图的代码隐藏中调用它,但是我的视图无法
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,它似乎工作得很出色。我也非常感谢文档的链接,这样我可以更好地理解代码,以防我需要调整它或在其他地方这样做。回答得很好,希望我能投多一票☺