【问题标题】:Get reference to nested control's sub control?获取对嵌套控件的子控件的引用?
【发布时间】:2013-05-08 02:34:16
【问题描述】:
  • MainWindow.xaml 具有视图模型 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 将按钮绑定到 TakePicture 命令:

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

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

非常感谢回复的人!!

【问题讨论】:

  • 你不能只在你的自定义控件中为 webBrowser 公开一个公共属性吗?还是不能修改自定义控件?
  • @sa_ddam213:我只是在学习 WPF,并且正在努力赶上疯狂的最后期限。现在,在我的应用程序启动中,我实例化了我的 MainWindow 的 View Model 对象。然后我创建一个新的 MainWindow 对象,并将 MainWindowViewModel 注入 MainWindow 对象,成为 MainWindow 的数据上下文。然后我调用 MainWindow.Show(),因为 CustomBrowserControl 是在 MainWindow 的 xaml 中定义的,所以它只是出现了。我对依赖属性一无所知。
  • @sa_ddam213:自从发布此内容后,我想出了一个可行的替代方案,如果我能弄清楚如何在 MainWindow 上使用一个按钮调用我的 CustomUserControl 的属性。

标签: wpf mvvm


【解决方案1】:

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

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

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-18
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多