WPF绑定组合框到LINQ填充的可观察集合

时间:2014-09-24 20:32:02

标签: c# wpf xaml

这是WPF的第一次体验,所以请原谅我,我知道这是非常基本但我不能让它工作。我只是尝试将组合框绑定到LINQ到EF填充的ObservableCollection。当我单步执行代码时,我看到该集合已填充,但组合框不显示集合的内容。

这是我的ViewModel:

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" />

我做错了什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

您已绑定到“网站”路径,但您的媒体资源名称为“SiteCollection”。

绑定到属性,因此名称必须匹配。还要确保将数据上下文设置为视图模型对象。