2013-05-16 97 views
5

我下面的教程Binding a comboBox to an Enum 並想出了這個XML代碼:WPF默認ComboBox項時,數據綁定

<ComboBox 
     DisplayMemberPath="Key" 
     SelectedValuePath="Value" 
     ItemsSource="{Binding VolumeLevelList}" 
     SelectedValue="{Binding SelectedVolumeLevel, ValidatesOnDataErrors=True, Mode=TwoWay}" 
     Height="23" HorizontalAlignment="Left" Margin="189,70,0,0" 
     VerticalAlignment="Top" Width="120" /> 

我正在尋找一種方式來選擇一個默認的選擇,像

的SelectedIndex = 「0」

但那不是工作..

+0

你是如何精確設置索引爲0?在代碼後面? – PoweredByOrange

+0

@ programmer93不,只是作爲組合框中的一個屬性XML – drtf

+0

請參閱下面的答案。 – PoweredByOrange

回答

3

我從教程中下載了代碼,並注意到缺少某些東西。在MainViewModel,INotifyPropertyChanged正確實施,但是,SelectedVolumeLevel屬性不調用set上的RaisePropertyChanged()方法。這意味着當你更新組合框時,源代碼不會被更新。您的SelectedIndex不起作用的原因是因爲SelectedValue已被設置並綁定到源。爲了解決這個問題,支持字段添加到您的MainViewModel這樣的:

private VolumeLevel selectedVolumeLevel = VolumeLevel.LowVolume; // Default is set to low 

然後改變SelectedVolumeLevel屬性這樣的:每次

public VolumeLevel SelectedVolumeLevel 
{ 
    get { return selectedVolumeLevel; } 
    set { selectedVolumeLevel = value; RaisePropertyChanged("SelectedVolumeLevel"); } 
} 

現在,在下拉列表中選擇的項目被改變,源正確地得到更新。這也應該解決你的默認選擇問題。

+0

謝謝!這工作完美! – drtf

+1

我對未完成的代碼表示歉意。該示例項目已針對將來導航到該網站的任何人進行更新。 –