2013-05-08 33 views
2
  • MainWindow.xaml具有视图模型MainWindowViewModel。
  • MainWindow.xaml具有称为 CustomBrowserControl.xaml
  • CustomBrowserControl.xaml具有名为元件web浏览器的嵌套用户控件。
  • MainWindowViewModel有一个需要参考 webBrowser的命令。获取对嵌套控件的子控件的引用?

    如何传递参考?


我想出了

基于EthicalLogics和sa_ddam213的答复,解决方案是,在我的主窗口后面的代码,如果我指定的用户控制(在XAML中,添加属性x:Name =“something”),然后我可以引用用户控件对象。然后我可以将该引用传递给MainWindowViewModel。这也显然是不好的做法,因为它打破了MVVM。

所以我做了什么,而不是

在我的用户控制,我创建了两个新的depdency属性如下:

public static readonly DependencyProperty TakePictureCommand = DependencyProperty.Register("TakePicture", typeof(ICommand), typeof(BrowserControl)); 
    public ICommand TakePicture 
    { 
     get { return (ICommand)GetValue(TakePictureCommand); } 
     set { SetValue(TakePictureCommand, value); } 
    } 

现在在我的MainWindow.xaml,我放置一个按钮。我可以用下面的XAML绑定的按钮TakePicture命令:

<Window> 
    <Button Content="Take Picture" Command="{Binding ElementName=browserControl, Path=DataContext.TakePicture}" FocusManager.IsFocusScope="True" ...> 
    <myUserControls:BrowserControl x:Name="browserControl" ... /> 
</Window> 

这样,我并不需要通过参考可言的,可能只是让用户控制命令/方法,由主窗口上的动作调用。

非常感谢那些回应!

+1

难道你不只是暴露在您的自定义控件的webBrowser公共财产?或者你是否可以不修改自定义控件? – 2013-05-08 03:37:21

+0

@ sa_ddam213:我刚刚学习WPF,并试图满足疯狂的截止日期。现在,在我的应用程序开始,我实例化我的MainWindow的View Model对象。然后我创建一个新的MainWindow对象,并将MainWindowViewModel注入到MainWindow对象中,成为MainWindow的数据上下文。然后我调用MainWindow.Show(),因为CustomBrowserControl是在MainWindow的xaml中定义的,所以它很简单。 我不知道任何有关依赖属性。 – 2013-05-08 03:42:41

+0

@ sa_ddam213:自从发布这个以来,我已经想出了一个可以工作的替代scenerio,如果我能弄清楚如何在我的MainWindow调用一个按钮来调用我的CustomUserControl属性。 – 2013-05-08 03:44:04

回答

2

我不认为它是MVVM中ViewModel中的控件引用的良好实践。但是你可以在视图模型创建web浏览器类型元素的属性,并指定它像

((MainWindowViewModel)this.DataContext).WebBrowserProperty=CustomBrowserControl.webBrowser 

我希望这将有助于。

+0

它的确如此,谢谢! – 2013-05-08 04:11:41