2013-10-22 71 views
0

我試圖解決我的(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:爲什麼索引改變了?

回答

0

不是一個真正的答案,但太多你如何使用SelectedValuePath評論

例如,如果你將它綁定到一個TextBlock Text然後它期望字符串。
這是沒有意義的,我改變SelectedValuePath 的類型,例如:

<TextBlock Text="{Binding ElementName=employeeListBox, 
         Path=SelectedValue}" 

不會下載和調試代碼,但是這個簡單的例子並不拋出異常,我

public MainWindow() 
{ 
    InitializeComponent(); 
    this.DataContext = this; 
    lbNoBinding.SelectedValuePath = "StrMix"; 
    lbNoBinding.DisplayMemberPath = "StrMix"; 
} 
public class MixedType 
{ 
    public string StrMix { get { return "strMix"; } } 
    public bool BoolMix { get { return true; } } 
} 
private List<MixedType> mixedTypes = new List<MixedType>() { new MixedType(), new MixedType() }; 
public List<MixedType> MixedTypes 
{ 
    get { return mixedTypes; } 
} 

private void btnClick(object sender, RoutedEventArgs e) 
{ 
    try 
    {     
     lbNoBinding.SelectedValuePath = "BoolMix"; 
     lbNoBinding.DisplayMemberPath = "BoolMix"; 
    } 
    catch (Exception ex) 
    { 
     System.Diagnostics.Debug.WriteLine(ex.Message); 
    } 
} 
+0

有趣的評論。它是這樣使用的:

+0

標籤內容需要字符串。 – Paparazzi

+0

註釋掉xaml中的第94和95行(都綁定到SelectedValue),所以現在沒有任何東西綁定到選定的值(沒有在其他地方用於其他任何東西)...相同的異常,相同的行爲。 – Noctis

相關問題