1
我一直坚持这个问题几个小时...我想要做的其实很简单 - 在ComboBox中设置一个默认选定的项目(我正在使用MVVM模式)。在WPF MVVM应用程序的组合框中设置一个默认的选定项目
我已经在我看来,组合框下面的XAML代码:
<ComboBox ItemsSource="{Binding Schools}"
DisplayMemberPath="Acronym"
SelectedValue="{Binding SelectedSchool}"
SelectedValuePath="Id"
/>
在我的ViewModel,我有一个ObservableCollection,学校:
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");
}
}
最后,学校是一个简单的业务对象:
[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的东西还是一个新的东西,所以如果有人能指出我正确的方向,我会很感激。
'学校'是'学校'类型的,而'SelectedSchool'是'int'类型的?可能这是你的问题? – GameScripting
嗯,我改变了SelectedSchool属性返回学校,而不是int,但它没有任何区别。我需要改变什么吗? – William
嗯,唯一可能出错的是...... SelectedSchool是'Schools'集合的一部分?如果没有,那么你必须自己做更多的研究。 – GameScripting