我試圖解決我的(here)的另一個問題,我卡在改變代碼SelectedValuePath
的內部。SelectedValuePath的內部如何工作(在組合框/列表框上)?
看來,這取決於我的/變化的,不同的事情會發生。 我研究過,調試它,甚至試圖找到在MS DLL中使用dotPeek有問題的代碼,但迄今爲止沒有用。
如果我從一個字符串屬性的任何類型的特性改變,它工作正常。
將字符串更改爲int將引發異常。
從BOOL到INT改變取決於:
- 如果屬性是假,所選擇的索引將變爲0,並且所選擇的值將改變爲false(不是int,因爲它被認爲是)
- 如果該屬性爲true,則所選索引將更改爲-1,並且所選值將爲空。
我的假設是,有人試圖解析某些東西,並根據發生的情況,結果可能會或可能不起作用。
由於SelectedValuePath
接收字符串作爲輸入,並將SelectedValue
設置爲任何它們指向的內容。我期望在改變這個時SelectedItem
不會改變,並且顯示正確的值。我沒有想到會得到這無數不同的結果/例外/行爲......
唯一想到的是,SelectedValue
的類型設置爲SelectedValuePath
指向的任何屬性,然後當它更改,它可能會遇到錯誤的類型...
作爲一種解決方法,將SelectedValuePath
設置爲null之前將其設置爲新的屬性似乎工作(避免任何異常被拋出)。
編輯:
我已經更新了一些更多類型的項目,你可以找到它here。 有問題的位位於Try/Catch塊中,每當發生奇怪的事情時都會顯示額外的信息。
問題1:這讓我爲難的行爲:從字符串更改爲任何其他類型(一旦你選擇的項目),將拋出一個異常,而SelectedValue
不會改變了(將其設置爲默認將解決這個問題)。
爲什麼System.FormatException: Input string was not in a correct format
扔了,什麼正在改變? (I預料,改變SelectedValuePath
willsimply「重置」 SelectedValue
給新的對象/類型)
此外,更改SelectedValuePath
將在大多數情況下的SelectedIndex復位要麼-1,或0 問題2:爲什麼索引改變了?
有趣的評論。它是這樣使用的:
標籤內容需要字符串。 – Paparazzi
註釋掉xaml中的第94和95行(都綁定到SelectedValue),所以現在沒有任何東西綁定到選定的值(沒有在其他地方用於其他任何東西)...相同的異常,相同的行爲。 – Noctis