2010-04-22 74 views
1

我按預期得到了這個cbxJobPosition_SelectionChanged射擊。問題是當外部方法試圖設置cbxJobPosition對於SelectionChanged事件,WPF組合框SelectedIndex和SelectedValue有不同的行爲嗎?

cbxJobPosition被databinded與JobPosition類型的對象的列表:

  • JobPositionID:1,JobPositionName:經理

  • JobPositionID:2,JobPositionName:員工

  • JobPositionID :3,JobPositionName:第三方

這裏的XAML:

<ComboBox Cursor="Hand" DataContext="{Binding}" ItemsSource="{Binding}" 
FontSize="13" Name="cbxJobPosition"  
SelectedValuePath="JobPositionID" DisplayMemberPath="JobPositionName" 
SelectedIndex="0" Width="233" Height="23" 
SelectionChanged="cbxJobPosition_SelectionChanged" /> 

在UserControl_Loaded方法,它從數據庫讀取的作業列表,並嘗試設置具體的工作崗位「第三方」:

//calls cbxJobPosition_SelectionChanged and passes the correct SelectedValue within 
cbxJobPosition.SelectedIndex = 3; 

//calls cbxJobPosition_SelectionChanged and but won't pass the correct SelectedValue within 
cbxJobPosition.SelectedValue = "3"; 

,你可以請注意,當處理自動重定向到cbxJobPosition_SelectionChanged時,當您在cbxJobPosition_SelectionChanged事件中進行調試時,SelectedValue屬性對於上面的每個語句將具有不同的值。

有沒有人知道這種差異是否預期,我錯過了什麼或它可能是一個錯誤?

回答

0

是JobPositionID a string?如果沒有,這可以解釋爲什麼它不起作用。在數據綁定級別,WPF不會自動將string轉換爲int。我猜測它在試圖改變盒子上的選擇爲無。

+0

JobPositionID是int – 2010-04-22 16:58:43

+0

我想出了用LINQ搜索元素,並使用找到的對象設置組合框的SelectedItem並執行SelectionChanged語句(在外部方法上)。我可能會說我不喜歡這個解決方案。 – 2010-04-22 17:02:36

+0

嗯,我不知道你在做什麼的所有細節,但至少對於這個例子,你可以將「3」解析爲一個int,然後用它來設置SelectedValue。 – RandomEngy 2010-04-22 17:06:35

相關問題