我已经被这个问题困扰了好几个小时......我想做的实际上很简单 - 在 ComboBox 中设置一个默认选定项(我使用的是 MVVM 模式)。
我的视图中有以下组合框的 XAML:
<ComboBox ItemsSource="{Binding Schools}"
DisplayMemberPath="Acronym"
SelectedValue="{Binding SelectedSchool}"
SelectedValuePath="Id"
/>
在我的 ViewModel 中,我有一个 ObservableCollection,Schools:
public ObservableCollection<School> Schools { get; private set; }
public CourseFormViewModel()
{
Schools = new ObservableCollection<School>();
try
{
// Gets schools from a web service and adds them to the Schools ObservableCollection
PopulateSchools();
}
catch (Exception ex)
{
// ...
}
}
public int SelectedSchool
{
get { return schoolId; }
set
{
schoolId = value;
OnPropertyChanged("SelectedSchool");
}
}
最后,School 是一个简单的业务对象:
[DataContract]
public class School
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Acronym { get; set; }
[DataMember]
public string Name { get; set; }
}
问题是,当应用程序启动时,组合框没有获得默认值。我尝试在 XAML 中将 SelectedIndex 设置为 0,但无济于事。我已经尝试在代码隐藏中的 Window_Loaded 事件处理程序中设置 SelectedIndex(这有效),但是因为我使用的 MVVM 模式感觉有点脏。我对整个 WPF/MVVM 的东西还是新手,所以如果有人能指出我正确的方向,我将不胜感激。