2013-10-21 55 views
0

如何處理在ViewModel中的屬性發生時發生的異常?該屬性發生在Loaded事件之前。例如,我有一個屬性(只能獲取),它調用一些數據方法來返回一組狀態以填充組合框的itemsource。但有時SQL不會連接,我得到一個exeption。有這樣的多個屬性,我想告訴用戶組合不能正確加載,然後把它們放回我的主屏幕。但是,如果他們全都失敗,我還是不要輸入5個消息框。另外,爲什麼它會繼續嘗試獲取屬性,即使我告訴它在第一個異常發生時進入主屏幕?注:GetStatesList()方法也有try/catch語句,並在catch扔...如何處理MVVM View Model屬性中的異常?

try 
{ 
ObservableCollection<string> states=null; 
// perform sql query 
states=StateDat.Instance.GetStatesList(); //get the collection of state names 
} 
catch(Exception ex) 
{ 
MessageBox.Show("Error"); //display an error message 
MessengerInstance.Send(ViewModelNamesEnum.HomeVM); //go home 
} 

回答

1

不斷有所有的五點聲明與1個嘗試捕捉,而不必爲每個語句嘗試捕捉,因此,如果異常發生以下3不會得到執行,不惜任何代價,你將有隻有1味精框,你可以返回到主屏幕以及沒有任何issuse

0

這裏第二個說法是,你可以處理這個問題的一種方法..

爲每個屬性調用創建單獨的方法..並拋出一個自定義的異常來指出該具體調用出錯了。 無論如何,外部的例外將確保如果一個失敗,它保釋出來..

Method1() { 
try { 
    //Code for Method1 
    }catch(Exception ex) { throw new CustomException(""); } 
} 

Method2() { 
try { 
    //Code for Method2 
    }catch(Exception ex) { throw new CustomException(""); } 
} 

Method3() { 
try { 
    //Code for Method3 
    }catch(Exception ex) { throw new CustomException(""); } 
} 


try { 
    Method1(); 
    Method2(); 
    Method3(); 
}catch(CustomException custom) { 
// You would know specific reasons for crashing.. and can return meaningful message to UI. 
} catch(Exception ex) { 
//Anything that was un-handled 
} 


class CustomException : Exception { 
//Implementation here.. 
}