在我的視圖模型中,我有兩個相關的屬性。他們的實現是這樣的:爲什麼我的ComboBox在Visual Studio中運行我的程序時需要很長時間才能下載?
public string Code
{
get { return _Code; }
set
{
if (_Code != value)
{
_Code = value;
OnPropertyChanged("Code");
OnPropertyChanged("RelatedCodeList");
}
}
public List<Code> RelatedCodeList
{
get
{
return CodeLists[Code];
}
}
CodeLists
是Dictionary<string, List<Code>>
。
我有一個ComboBox
這是綁定到RelatedCodeList
;它的實現看起來像這樣:
<ComboBox SelectedItem="{Binding RelatedCode, Mode=TwoWay}"
ItemsSource="{Binding RelatedCodeList}">
這似乎很簡單,它的工作原理除一件事外。當我在UI中更改Code
,然後單擊組合框時,需要兩或三秒才能下拉。即使列表中的項目少於10個。
這是什麼原因造成的?這不是收集更改事件:List
不實施INotifyCollectionChanged
,並且無論如何收集沒有改變。它似乎沒有發生在視圖模型內部;我已經將斷點放入屬性獲取器中,只要屬性更改事件發生,獲取器就會中斷;當組合框下降時它們不會被調用。它似乎不是項目呈現:沒有爲Code
類定義數據模板,並且該類中的ToString()
的實現是微不足道的。
我在忽略什麼?
編輯
我跟進威爾的建議,並發現這種情況不會發生,除非我在調試器下運行。如果我只是運行可執行文件(即使是Debug版本),它也能正常運行。
因此,爲了使這個問題真正有用,我們來對其進行修改:爲什麼會發生這種情況?而且,更重要的是,如果調試器應該受到指責,我是否有任何方法可以告訴調試器將事物混亂起來,這樣我就不會花幾個小時試圖找出實際上不存在的問題的原因?
任何在輸出窗口可疑?之前我遇到過這樣的事情,我認爲這與UI-Automation拋出無例外的異常有關。如果你可以發佈一些獨立的代碼來重現問題,那將會很有幫助。 –
在RelatedCode的get或set方法中是否有任何相關的代碼?你有沒有嘗試刪除SelectedItem綁定? – grantnz
「RelatedCodeList」集合中有多少項?輸出窗口中是否有任何'BindingErrors'? – Dennis