- 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>
这样,我并不需要通过参考可言的,可能只是让用户控制命令/方法,由主窗口上的动作调用。
非常感谢那些回应!
难道你不只是暴露在您的自定义控件的webBrowser公共财产?或者你是否可以不修改自定义控件? – 2013-05-08 03:37:21
@ sa_ddam213:我刚刚学习WPF,并试图满足疯狂的截止日期。现在,在我的应用程序开始,我实例化我的MainWindow的View Model对象。然后我创建一个新的MainWindow对象,并将MainWindowViewModel注入到MainWindow对象中,成为MainWindow的数据上下文。然后我调用MainWindow.Show(),因为CustomBrowserControl是在MainWindow的xaml中定义的,所以它很简单。 我不知道任何有关依赖属性。 – 2013-05-08 03:42:41
@ sa_ddam213:自从发布这个以来,我已经想出了一个可以工作的替代scenerio,如果我能弄清楚如何在我的MainWindow调用一个按钮来调用我的CustomUserControl属性。 – 2013-05-08 03:44:04