2014-09-24 1 views
2

이것은 WPF의 첫 번째 경험이므로 용서 해주십시오. 저는이 것이 매우 기본적인 것임을 알고 있지만 작동시키지 못합니다. 난 단순히 콤보 상자를 LINQ to EF 채워진 ObservableCollection에 바인딩하려고합니다. 코드를 단계별로 실행하면 컬렉션이 채워지는 것을 볼 수 있지만 콤보 상자에는 컬렉션의 내용이 표시되지 않습니다.WPF LINQ에 채워지는 콤보 상자 채워지는 관측 가능 컬렉션

public class MainWindowViewModel : ViewModelBase 
{ 
    # region ObservableCollections 

    private ObservableCollection<Site> _sitescollection; 
    public ObservableCollection<Site> SiteCollection 
    { 
     get { return _sitescollection;} 
     set { 
      if (value == _sitescollection) return; 
      _sitescollection = value; 
      RaisePropertyChanged("SiteCollection"); 
     } 
    } 

    # endregion 


    public MainWindowViewModel() 
    { 
     this.PopulateSites(); 
    } 

    // Get a listing of sites from the database 
    public void PopulateSites() 
    { 

     using (var context = new Data_Access.SiteConfiguration_Entities()) 
     { 
      var query = (from s in context.SITE_LOOKUP 
         select new Site(){Name = s.SITE_NAME, SeqId = s.SITE_SEQ_ID }); 

      SiteCollection = new ObservableCollection<Site>(query.ToList()); 

     } 
    } 

} 

내 사이트 클래스 :

public class Site : INotifyPropertyChanged 
{ 
    #region Properties 

    string _name; 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      if (_name != value) 
      { 
       _name = value; 
       RaisePropertyChanged("Name"); 
      } 
     } 
    } 

    private int _seqid; 
    public int SeqId 
    { 
     get { 
      return _seqid; 
     } 
     set { 
      if (_seqid != value) 
      { 
       _seqid = value; 
       RaisePropertyChanged("SeqId"); 
      } 
     } 
    } 

    #endregion 

    #region Constructors 
    public Site() { } 

    public Site(string name, int seqid) 
    { 
     this.Name = name; 
     this.SeqId = seqid; 
    } 

    #endregion 

    void RaisePropertyChanged(string prop) 
    { 
     if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
} 

그리고 내 XAML 바인딩 :

   <ComboBox Margin="10" 
          ItemsSource="{Binding Sites}" 
          DisplayMemberPath="Name" 
          SelectedValuePath="SeqId" /> 

내가 뭘 잘못 여기에

내 뷰 모델인가? 어떤 도움이라도 대단히 감사하겠습니다.

답변

3

"사이트"경로에 바인딩했지만 속성 이름은 "SiteCollection"입니다.

속성을 바인딩하여 이름이 일치해야합니다. 또한 데이터 컨텍스트가 뷰 모델 객체로 설정되어 있는지 확인하십시오.

+0

감사합니다. @BradleyDotNET. 나는 내가 그것을 알아 차리지 못했다고 믿을 수 없다. 너무 당황해서 당황했습니다. – mack

+0

@mack "MainWindowViewModel 개체의 속성 사이트를 찾을 수 없음"과 같은 출력 창에서 System.Data 예외를 확인해야합니다. 이러한 오류는 일반적으로이 물건을 더 빨리 찾을 수 있도록 도와줍니다. :) – BradleyDotNET

+0

감사합니다. @BradleyDotNET, 이제 출력 창에 표시됩니다. 나는 그것에 더 많은 관심을 기울일 것이다! :) – mack

관련 문제