c# - WPF 将组合框绑定(bind)到 LINQ 填充的可观察集合

标签 c# wpf xaml

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

这是我的 View 模型:

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 绑定(bind):

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

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

最佳答案

您绑定(bind)到路径“Sites”,但您的属性名称是“SiteCollection”。

您绑定(bind)到属性,因此名称必须匹配。还要确保您的数据上下文设置为您的 View 模型对象。

关于c# - WPF 将组合框绑定(bind)到 LINQ 填充的可观察集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26025969/

相关文章:

c# - 单个集合上的多个 ItemControl 同时将过滤器应用于所有 View

c# - 如何使用数据绑定(bind)在 ItemsControl 中设置 Z-Index?

c# - 什么时候在 C# 中初始化静态变量?

c# - Generic Repository 是否需要一个 Base Entity 类才能在所有地方应用?

c# - 为什么 EF 在执行 "from"连接时丢失包含数据

wpf - 使textblock只读

wpf - 在 WPF 中的数据绑定(bind)组合框中禁用分隔符选择

c# - 访问 Winform 控件的特定实例

c# - 如何滚动到 DataGrid 的最后一列?

.net - WPF XAML - 带有 ItemSource 和子菜单项的 MenuItem