2012-12-09 26 views
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的東西還是一個新的東西,所以如果有人能指出我正確的方向,我會很感激。

+0

'學校'是'學校'類型的,而'SelectedSchool'是'int'類型的?可能這是你的問題? – GameScripting

+0

嗯,我改變了SelectedSchool屬性返回學校,而不是int,但它沒有任何區別。我需要改變什麼嗎? – William

+0

嗯,唯一可能出錯的是...... SelectedSchool是'Schools'集合的一部分?如果沒有,那麼你必須自己做更多的研究。 – GameScripting

回答

4

您可以設置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」。

如果你想用最小的編號初始化組合框,你可以使用此代碼:

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

而不是分配恆定值。

相關問題