MVVM 中的 Webbrowser LoadCompleted 事件
Webbrowser LoadCompleted Event in MVVM
首先是我在 Page1 控件中声明的变量:
private PPt.Presentation oPPPresentation = null;
private PPt.Application oPPApplication = null;
private PPt.SlideShowWindow oPPslideShow;
private PPt.Slide oPPSlide;
private Object oDocument;
我目前有一个 webBrowser 控件(称为 powerPointBrowser1),它显示由字符串传递的 powerpoint:
public Page1()
{
InitializeComponent();
powerPointBrowser1.Navigate(strFileName);
powerPointBrowser1.LoadCompleted += powerPointBrowser1_LoadCompleted;
}
这是我的powerPoint1Browser_LoadCompleted方法:
private void powerPointBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
{
oDocument = powerPointBrowser1.Document;
oPPPresentation = (PPt.Presentation)oDocument;
oPPApplication = oPPPresentation.Application;
}
现在回答我的问题:如何在我的 Page1ViewModel 中获取 LoadCompleted 方法,以便我可以访问我的 VM 中的 oDocument?
编辑:
在我的 Page1.xaml.cs:
public static DependencyProperty DocProperty =
DependencyProperty.RegisterAttached("Doc"
, typeof(Object)
, typeof(Page1)
, new FrameworkPropertyMetadata(null)
{ BindsTwoWayByDefault = true });
public static Object GetDoc(DependencyObject obj)
{
return (Object)obj.GetValue(DocProperty);
}
public static void SetDoc(DependencyObject obj, Object value)
{
obj.SetValue(DocProperty, value);
和
private void powerPointBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
{
oDocument = powerPointBrowser1.Document;
this.SetCurrentValue(DocProperty, oDocument); //new
oPPPresentation = (PPt.Presentation)oDocument;
oPPApplication = oPPPresentation.Application;
}
视图模型:
public Object someVMProperty { get; set; }`
private string GetSlideNumber()
{
oPPPresentation = (PPt.Presentation)someVMProperty;`
...
如果您将依赖项 属性 添加到 window,那么您可以将其绑定到视图模型中的完整 属性。使用 dp 上的 meta 设置进行双向操作。
在该 dp 上使用 setcurrentvalue 将其设置为您的文档,它将传输到视图模型。
视图模型上的 setter 将触发,您可以在那里执行任何您想做的事情 - 调用方法或其他任何东西。
话虽如此。
网页是一种视图类型的对象,将其复制到视图模型通常被认为是应该避免的事情。也许你应该在视图中做一些处理并将结果传递给视图模型。
MVVM 并不总是意味着视图中绝对没有代码。
将依赖项 属性 添加到 window。使用附加的 属性 以便我们可以在 window 标签中的 XAML 中设置绑定。
在window
public static DependencyProperty DocProperty =
DependencyProperty.RegisterAttached("Doc"
, typeof(HTMLDocument)
, typeof(MainWindow)
, new FrameworkPropertyMetadata(null)
{ BindsTwoWayByDefault = true });
public static HTMLDocument GetDoc(DependencyObject obj)
{
return (HTMLDocument)obj.GetValue(DocProperty);
}
public static void SetDoc(DependencyObject obj, HTMLDocument value)
{
obj.SetValue(DocProperty, value);
}
显然,您的 window 可能不是 mainwindow 并且我不完全确定您的文档类型是什么。这可能需要一些修改。
建造。然后你可以加入你的 window 标签:
local:MainWindow.Doc="{Binding someVMProperty}"
在这里,someVMProperty 是您的视图模型中的 属性,它将获取文档。那必须是带有 get 和 set 的 public 属性。您将从集合中调用一些方法。 local 是对您的项目的 xmlns 引用。
您需要做的就是在您的代码中进行设置。
this.SetCurrentValue(DocProperty, newValue);
不是真正的 MVVM,但你可以通过直接在主 window 中引用来做到这一点,假设你有 Page1(用户控件)+ MainWindow:
public partial class Page1 : UserControl
{
public Page1()
{
InitializeComponent();
powerPointBrowser1.Navigate("http://www.bbc.co.uk");
}
}
public partial class MainWindow : Window
{
private Page1Model _pageModel;
public MainWindow()
{
InitializeComponent();
_pageModel = new Page1Model();
DataContext = _pageModel;
ctlPage1.powerPointBrowser1.LoadCompleted += _pageModel.BrowserLoadCompleted;
}
然后您可以在视图模型中处理该事件 class:
public void BrowserLoadCompleted(object sender, NavigationEventArgs e)
Page1 XAML 包含浏览器:
<WebBrowser Name="powerPointBrowser1"/>
主要window包含控件:
<local:Page1 Name="ctlPage1"/>
首先是我在 Page1 控件中声明的变量:
private PPt.Presentation oPPPresentation = null;
private PPt.Application oPPApplication = null;
private PPt.SlideShowWindow oPPslideShow;
private PPt.Slide oPPSlide;
private Object oDocument;
我目前有一个 webBrowser 控件(称为 powerPointBrowser1),它显示由字符串传递的 powerpoint:
public Page1()
{
InitializeComponent();
powerPointBrowser1.Navigate(strFileName);
powerPointBrowser1.LoadCompleted += powerPointBrowser1_LoadCompleted;
}
这是我的powerPoint1Browser_LoadCompleted方法:
private void powerPointBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
{
oDocument = powerPointBrowser1.Document;
oPPPresentation = (PPt.Presentation)oDocument;
oPPApplication = oPPPresentation.Application;
}
现在回答我的问题:如何在我的 Page1ViewModel 中获取 LoadCompleted 方法,以便我可以访问我的 VM 中的 oDocument?
编辑:
在我的 Page1.xaml.cs:
public static DependencyProperty DocProperty =
DependencyProperty.RegisterAttached("Doc"
, typeof(Object)
, typeof(Page1)
, new FrameworkPropertyMetadata(null)
{ BindsTwoWayByDefault = true });
public static Object GetDoc(DependencyObject obj)
{
return (Object)obj.GetValue(DocProperty);
}
public static void SetDoc(DependencyObject obj, Object value)
{
obj.SetValue(DocProperty, value);
和
private void powerPointBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
{
oDocument = powerPointBrowser1.Document;
this.SetCurrentValue(DocProperty, oDocument); //new
oPPPresentation = (PPt.Presentation)oDocument;
oPPApplication = oPPPresentation.Application;
}
视图模型:
public Object someVMProperty { get; set; }`
private string GetSlideNumber()
{
oPPPresentation = (PPt.Presentation)someVMProperty;`
...
如果您将依赖项 属性 添加到 window,那么您可以将其绑定到视图模型中的完整 属性。使用 dp 上的 meta 设置进行双向操作。
在该 dp 上使用 setcurrentvalue 将其设置为您的文档,它将传输到视图模型。
视图模型上的 setter 将触发,您可以在那里执行任何您想做的事情 - 调用方法或其他任何东西。
话虽如此。
网页是一种视图类型的对象,将其复制到视图模型通常被认为是应该避免的事情。也许你应该在视图中做一些处理并将结果传递给视图模型。
MVVM 并不总是意味着视图中绝对没有代码。
将依赖项 属性 添加到 window。使用附加的 属性 以便我们可以在 window 标签中的 XAML 中设置绑定。
在window
public static DependencyProperty DocProperty =
DependencyProperty.RegisterAttached("Doc"
, typeof(HTMLDocument)
, typeof(MainWindow)
, new FrameworkPropertyMetadata(null)
{ BindsTwoWayByDefault = true });
public static HTMLDocument GetDoc(DependencyObject obj)
{
return (HTMLDocument)obj.GetValue(DocProperty);
}
public static void SetDoc(DependencyObject obj, HTMLDocument value)
{
obj.SetValue(DocProperty, value);
}
显然,您的 window 可能不是 mainwindow 并且我不完全确定您的文档类型是什么。这可能需要一些修改。
建造。然后你可以加入你的 window 标签:
local:MainWindow.Doc="{Binding someVMProperty}"
在这里,someVMProperty 是您的视图模型中的 属性,它将获取文档。那必须是带有 get 和 set 的 public 属性。您将从集合中调用一些方法。 local 是对您的项目的 xmlns 引用。
您需要做的就是在您的代码中进行设置。
this.SetCurrentValue(DocProperty, newValue);
不是真正的 MVVM,但你可以通过直接在主 window 中引用来做到这一点,假设你有 Page1(用户控件)+ MainWindow:
public partial class Page1 : UserControl
{
public Page1()
{
InitializeComponent();
powerPointBrowser1.Navigate("http://www.bbc.co.uk");
}
}
public partial class MainWindow : Window
{
private Page1Model _pageModel;
public MainWindow()
{
InitializeComponent();
_pageModel = new Page1Model();
DataContext = _pageModel;
ctlPage1.powerPointBrowser1.LoadCompleted += _pageModel.BrowserLoadCompleted;
}
然后您可以在视图模型中处理该事件 class:
public void BrowserLoadCompleted(object sender, NavigationEventArgs e)
Page1 XAML 包含浏览器:
<WebBrowser Name="powerPointBrowser1"/>
主要window包含控件:
<local:Page1 Name="ctlPage1"/>