1

我已经被这个问题困扰了好几个小时......我想做的实际上很简单 - 在 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 的东西还是新手,所以如果有人能指出我正确的方向,我将不胜感激。

4

1 回答 1

5

您可以像这样设置 SelectedSchool:

public void CourseFormViewModel()
    {
        Schools = new ObservableCollection<School>();

        try
        {
            // Gets schools from a web service and adds them to the Schools ObservableCollection
            PopulateSchools();

            SelectedSchool = 3;
        }
        catch (Exception ex)
        {
            // ...
        }
    }

测试数据:

 Schools.Add(new School { Id = 1, Name = "aaa", Acronym = "a" });
 Schools.Add(new School { Id = 2, Name = "bbb", Acronym = "b" });
 Schools.Add(new School { Id = 3, Name = "ccc", Acronym = "c" });

您将获得选定的项目“c”。

如果您想要具有最小 Id 的 init ComboBox,您可以使用以下代码:

SelectedSchool = Schools.Min(x => x.Id);

而不是分配常量值。

于 2012-12-09T20:17:13.780 回答