gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:16:19 24 4
gpt4 key购买 nike

  • 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 中引用 Controls 不是一个好习惯。但是您可以在 ViewModel 中创建 Type WebBrowser Element 的属性并将其分配为

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

    我希望这将有所帮助。

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

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com