获取对嵌套控件的子控件的引用?

时间:2013-05-08 02:34:16

标签: wpf mvvm

  • MainWindow.xaml具有视图模型MainWindowViewModel。
  • MainWindow.xaml有一个名为的嵌套用户控件 CustomBrowserControl.xaml
  • CustomBrowserControl.xaml有一个命名元素webBrowser。
  • MainWindowViewModel有一个需要引用的命令 web浏览器。

    如何传递参考?


我提出的解决方案

基于EthicalLogics和sa_ddam213的响应,是的,在我的MainWindow背后的代码中,如果我命名用户控件(在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 个答案:

答案 0 :(得分:2)

我认为在MVVM中的ViewModel中引用控件并不是一个好习惯。但您可以在ViewModel中创建Type WebBrowser Element的属性,并将其指定为

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

我希望这会有所帮助。