首先我在Page1 Control中声明了变量:
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;`
...
答案 0 :(得分:0)
如果向窗口添加依赖项属性,则可以将其绑定到viewmodel中的完整属性。使用dp上的元设置进行双向播放。 在该dp上使用setcurrentvalue将其设置为您的文档,它将传输到viewmodel 视图模型上的setter将会触发,你可以在那里做任何你想做的事情 - 调用方法或其他任何东西。
说完了。 网页是一种视图类型的对象,将其复制到视图模型通常被认为是要避免的。也许您应该在视图中进行一些处理并将结果传递给viewmodel MVVM并不总是意味着视图中没有代码。
向窗口添加依赖项属性。使用附加属性,以便我们可以在窗口标记中的XAML中设置绑定 在窗口中
pip install mysqlclient
显然,您的窗口可能不是主窗口,我不完全确定您的文档类型。这可能需要一些修改。
构建。然后你可以坚持使用你的窗口标签:
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);
}
这里,someVMProperty是viewmodel中将获取文档的属性。那必须是带有get和set的公共属性。你将从集合中调用一些方法。 local是对项目的xmlns引用。
您需要做的只是在您的代码中设置它。
local:MainWindow.Doc="{Binding someVMProperty}"
答案 1 :(得分:0)
不是真正的MVVM,但你可以直接在主窗口中引用它,假设你有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;
}
然后您可以在视图模型类中处理该事件:
public void BrowserLoadCompleted(object sender, NavigationEventArgs e)
Page1 XAML包含浏览器:
<WebBrowser Name="powerPointBrowser1"/>
主窗口包含控件:
<local:Page1 Name="ctlPage1"/>