wpf - 获取嵌套控件的子控件的引用?

标签 wpf mvvm

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

    如何传递推荐信?


我想出的解决方案

根据 EthicalLogics 和 sa_ddam213 的回复,是的,在我的 MainWindow 后面的代码中,如果我命名用户控件(在 xaml 中,添加属性 x:Name="something"),我就可以引用该用户控件目的。然后我可以将该引用传递给 MainWindowViewModel。这显然也是不好的做法,因为它破坏了 MVVM。

所以我做了什么

在我的用户控件中,我创建了两个新的依赖属性,如下所示:

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 将按钮绑定(bind)到 TakePicture 命令:

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

这样我根本不需要传递引用,并且可以让用户控件中的命令/方法由主窗口上的操作调用。

非常感谢那些回复的人!!

最佳答案

我认为在 MVVM 中的 ViewModel 中引用控件并不是一个好的做法。但是您可以在 ViewModel 中创建 Type WebBrowser Element 的属性并像这样分配它

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

我希望这会有所帮助。

关于wpf - 获取嵌套控件的子控件的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16431759/

相关文章:

javascript - 在 WPF Web 浏览器中调用 Javascript,无需调度程序

jsf - 何时对 Java JEE 项目使用客户端 Web 框架 [angularjs/bootstrap/backbone] 服务器端框架 [JSF/Struts/SpringMVC]

c# - 使用具有行+列坐标的值集合动态填充数据网格

c# - 如何在 WPF 中刷新/重新加载数据网格?

c# - Expression Blend 的替代品

c# - 在 WPF 中从一个 xaml 导航到另一个

c# - 无法绑定(bind)到 ReactiveUI 中覆盖的 WPF TextBox

c# - 具有默认内容值和绑定(bind)值的复选框

c# - WPF 工具包图表控件绑定(bind)

c# - WPF Textblock文本不会在组合框所选项目上动态更改