2013-05-08 51 views
2
  • 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> 

這樣,我並不需要通過參考可言的,可能只是讓用戶控制命令/方法,由主窗口上的動作調用。

非常感謝那些迴應!

+1

難道你不只是暴露在您的自定義控件的webBrowser公共財產?或者你是否可以不修改自定義控件? – 2013-05-08 03:37:21

+0

@ sa_ddam213:我剛剛學習WPF,並試圖滿足瘋狂的截止日期。現在,在我的應用程序開始,我實例化我的MainWindow的View Model對象。然後我創建一個新的MainWindow對象,並將MainWindowViewModel注入到MainWindow對象中,成爲MainWindow的數據上下文。然後我調用MainWindow.Show(),因爲CustomBrowserControl是在MainWindow的xaml中定義的,所以它很簡單。 我不知道任何有關依賴屬性。 – 2013-05-08 03:42:41

+0

@ sa_ddam213:自從發佈這個以來,我已經想出了一個可以工作的替代scenerio,如果我能弄清楚如何在我的MainWindow調用一個按鈕來調用我的CustomUserControl屬性。 – 2013-05-08 03:44:04

回答

2

我不認爲它是MVVM中ViewModel中的控件引用的良好實踐。但是你可以在視圖模型創建web瀏覽器類型元素的屬性,並指定它像

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

我希望這將有助於。

+0

它的確如此,謝謝! – 2013-05-08 04:11:41