2012-12-09 3 views
1

몇 시간 동안이 문제에 고생했습니다 ... 제가하고 싶은 것은 실제로 매우 간단합니다. ComboBox에서 기본 선택된 항목을 설정합니다. MVVM 패턴). WPF MVVM 응용 프로그램에서 ComboBox의 기본 선택 항목 설정

내보기에서 콤보 상자에 대해 다음 XAML 한 :

마지막으로
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"); 
     } 
    } 

이 학교는 단순한 비즈니스 객체입니다, 나는 ObservableCollection에, 학교를

<ComboBox ItemsSource="{Binding Schools}" 
      DisplayMemberPath="Acronym" 
      SelectedValue="{Binding SelectedSchool}" 
      SelectedValuePath="Id" 
/> 

내 뷰 모델에 있습니다 :

문제는 응용 프로그램이 시작될 때 콤보 상자가 기본값. XAML에서 SelectedIndex를 0으로 설정하려고했지만 아무 소용이 없습니다. 내가 코드 - 배후 (어느 작품)에 Window_Loaded 이벤트 처리기에서 SelectedIndex를 설정했는데,하지만 내가 더러운의 종류를 느낄 MVVM 패턴을 사용하고 있기 때문에. 나는 여전히이 전체 WPF/MVVM에 익숙하기 때문에 누군가가 올바른 방향으로 나를 가리킬 수 있다면 감사 할 것입니다.

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"를 선택한 얻을 것이다 :

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) 
     { 
      // ... 
     } 
    } 

테스트 데이터 :

+0

'Schools'은'School' 유형이고'SelectedSchool' 유형은'int'입니까? 이것이 당신 문제입니까? – GameScripting

+0

흠, SelectedSchool 속성을 int 대신 School을 반환하도록 변경했지만 아무런 차이가 없었습니다. 다른 것을 바꾸어야합니까? – William

+0

흠, 틀린 것 ...'SelectedSchool'는'Schools' 콜렉션의 일부입니까? 그렇지 않다면 스스로 연구해야합니다. – GameScripting

답변

4

이 같은 SelectedSchool을 설정할 수 있습니다.

당신이 작은 이드 초기화 콤보를 원하는 경우에이 코드를 사용할 수 있습니다

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

대신 할당 상수 값을.

관련 문제