2013-08-05 83 views
1

我有一個View Model控制Tree View。在我的GUI中還有一個Tab Control,它不受View Model的控制。如果我想使用Tree View訪問Tab Control的元素,我將如何給View Model訪問它(Tab Control)?訪問視圖模型中的選項卡控件類

我猜這將是沿着如何將從Tree View從代碼隱藏到View Model所選項目的方式。

代碼隱藏:

//Gets selected item in TreeView 
private void Tree_One_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{ 
     MainWindowViewModel.SelectedItem = e.NewValue as TreeViewItem; 
} 

View Model

public static TreeViewItem SelectedItem { get; set; } //Selected Node\ 

我現在嘗試

代碼隱藏:

MainWindowViewModel.middleControl = tabControl1 as TabControl; 

View Model

public static TabControl middleControl { get; set; } 

下不起作用,因爲View Model仍然沒有看到任何項目的Tab Control

if (parent_Node.Items.Contains(SelectedItem)) 
       middleControl.SelectedIndex = nameOfTabItem; 

回答

1

如果您想訪問項目中其他類的視圖元素,您可以查詢該窗口。當我的SelectedItem更改時,我調用我的View Model中查詢窗口的功能,然後繼續執行操作。

是的 - 我知道這是不正確的MVVM禮節,但它的工作原理,它提供了一個解決我的問題。

代碼隱藏:

//Gets selected item in TreeView 
private void Tree_One_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{ 
     MainWindowViewModel.SelectedItem = e.NewValue as TreeViewItem; 
     MainWindowViewModel.changeTab(); 
} 

View Model

//Controls the changing of tabs, corresponding with the selected TreeViewItem 
public static void changeTab() 
{ 
    //Query for Window1 
    var mainWindow = Application.Current.Windows 
     .Cast<Window1>() 
     .FirstOrDefault(window => window is Window1) as Window1; 

    //Change selected tab item 
    if (parent_Node.Items.Contains(SelectedItem)) 
     mainWindow.TabItem.IsSelected = true; 

    //other operations.... 
} 
1

內的視圖模型不應該使用Tab控制直。 MVVM架構的全部目的是分離用戶界面和業務邏輯。只有視圖才能訪問UI中的控件,即使如此,由於數據綁定和視圖模型中的邏輯,這也很少有必要。

爲什麼選項卡控件不受視圖模型管理?

此外,視圖模型不應該知道任何有關TreeViewItems的信息 - 它應該對綁定到樹中每個項目的模型類進行操作。

+0

,因爲我使用的設計窗口創建放物品就可以了'標籤control'不被'視圖model'管理。我認爲用模型創建這樣一個詳細的「選項卡控件」會困難得多。 –

+2

@EricAfterDark關於如何處理MVVM中的TabControl,請參見[我的回答](http://stackoverflow.com/a/17954320/643085)。 –

+0

@Ericafterdark使用MVVM的標籤控件比樹或列表控件更難,但可以完成。 HighCore的回答很好地描述了這個過程。 – Andy

相關問題