嗨 我想知道,如果這種做法是正確的,或者是什麼應該是一個 我有一個MVVM模式的權利,我有一個ListView 我的想法是,當我選擇列表視圖中的項目,視圖模型中的屬性會使用選定的對象進行更新。 HOwever,當用戶按下Intro時,我希望viewmodel做些事情(打開一個新的瀏覽器窗口)。我做了這樣的事情:需要調用視圖模型的方法從View
private void listView1_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
var vm = Resources["Locator"] as MainViewModel;
if (listView1.SelectedIndex != -1 && e.Key == Key.Enter)
{
vm.OpenBrowserForSelectedOffer();
}
}
但是我不知道這是不是有事情好做,或者別的東西應該做的正確途徑。因爲在這種情況下,視圖實際上是在請求視圖模型(這是一種資源),也許它「知道太多」,並且有更好的實踐來解決這類問題。
打開瀏覽器是UI邏輯,而不是業務邏輯;並在視圖模型中加入類似的東西使其無法測試。 – 2010-12-15 14:27:44
可測試性可以被解決(就像你在你的答案中提出的那樣),我不同意僅僅因爲它恰好啓動了一個具有UI的外部程序,它就是UI邏輯。 – 2010-12-15 15:25:32
在視圖模型中使用Process.Start對我來說不是一個好方法,因爲你不能嘲笑它。但是可能我們說的是同樣的東西:處理本身是在視圖模型中完成的,但是Process.Start的實際實現應該被抽象出來。 – 2010-12-15 15:34:48