2012-06-04 98 views
2

我需要使用mvvm模式。我知道這個視圖模型不應該關心我正在閱讀的視圖。因此,我不知道如何解決這個問題:MVVM視圖模型參考視圖

我有一個DLL,它基本上變成一個文本框和ListView爲自動完成控件:

SomeDll.InitAutocomplete<string>(TextBox1, ListView1, SomeObservableCollection); 

反正我不知道該怎麼稱呼該方法使用mvvm模式從視圖模型。如果我在視圖中引用控件,我將制定規則。

我是MVVM模式的新手,我的公司需要我關注它。什麼纔是解決這個問題最合適的方法?

我知道我將能夠通過將整個視圖作爲構造函數參數傳遞給viewmodel來解決它,但僅僅因爲需要引用視圖中的兩個控件纔會破壞mvvm模式。

回答

3

你在這裏做什麼是一個純粹的視圖關注,所以我建議在視圖(即代碼隱藏)中做。該視圖知道虛擬機及其可觀察集合,爲什麼不讓代碼使用這個調用?

(我也建議看,如果你能得到一個非代碼/ XAML API爲「SomeDll」,但我不知道你會如何的控制力是)

2

有兩件事情,我在這裏指出 -

首先,這是有效的所有視圖層代碼。因此,使用後面的代碼並不一定違反MVVM - 如果需要,您不在後面的代碼中包含一些代碼來橋接View-> ViewModel圖層。

話雖這麼說,這往往是在以下兩種方式之一進行處理更優雅 -

  1. 你可以換這個功能集成到一個新的控制 - 有效的AutoCompleteTextBox控制。這將允許您將「文本框」和「列表視圖」視覺元素包含到控件模板中,並綁定到Xaml中的完成項目。

  2. 你可以把它變成一個附屬屬性(或Blend行爲),它可以讓你「附加」到一個文本框,並添加該功能(全部在xaml內)。項目集合然後將成爲對所附屬性(或行爲)的綁定。