ListBox的简单WPF DataBinding到字符串的ObservableCollection

好吧,我只是不明白。 请告诉我为什么我的ListBox中没有任何项目(现在应该是两个字符串“空”和“东西”):

XAML:

         

在SettingsWindowModel中:

  private ObservableCollection _ignoredActivities; public ObservableCollection IgnoredActivities { get { if (_ignoredActivities == null) { // empty _ignoredActivities = new ObservableCollection() { "empty","stuff" }; } return _ignoredActivities; } } 

还有什么你需要知道的吗? 我忘记了什么?

编辑:也许我应该补充一点,VisualStudio + ReSharper也没有显示下划线和编译错误。 甚至没有警告。

对不起伙计们,数据一直在那里。 问题出在视觉细节上。 填充也应用于ListBox(或项目)的子容器, 因此项目不位于列表的顶部。 由于我只是ListBox上的高度,所以项目总是低于ListBox的可见高度 。 Stange要调试的东西。 谢谢你的答案!

1)您不需要设置DataTemplate

2)您确定视图的DataContext(aaaaa.xaml.cs)是ViewModel(bbbbb.cs,包含IgnoredActivities)吗?

它应该是这样的:

aaaaa.xaml:

  

aaaaa.xaml.cs:

 public partial class aaaaa : Window, INotifyPropertyChanged { public MainWindow() { InitializeComponent(); this.DataContext = new bbbbb(); } } 

bbbbb.cs:

  public class bbbbb : INotifyPropertyChanged { public bbbbb() { IgnoredActivities.Add("empty"); IgnoredActivities.Add("stuff"); } private ObservableCollection _ignoredActivities; public ObservableCollection IgnoredActivities { get { if (_ignoredActivities == null) { // empty _ignoredActivities = new ObservableCollection() { "empty","stuff" }; } return _ignoredActivities; } } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(string _Prop) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(_Prop)); } #endregion } } 

确保DataContext包含IgnoredActivities并将ItemsSource绑定到它:

 ItemsSource="{Binding IgnoredActivities}" 

使用此语句,您将绑定到Window中名为“model”的控件中的“IgnoredActivities”属性。

 ItemsSource="{Binding ElementName=model, Path=IgnoredActivities}" 

使用ViewModels时,将它们设置为控件的DataContext:

      

没有指定源的绑定(“{Binding PathToMyPropert}”)默认为控件的DataContext,它inheritance自父控件。 因此,在您的情况下,您可以将ViewModel设置为Window的DataContext,以便它的所有子项都可以使用:

       

摆脱ElementName绑定属性。 它用于绑定到WPF控件。 只需设置ItemsSource={Binding IgnoredActivities}

尝试如下:

             

尝试在后面的代码中为控件设置DataContext。

 Xaml -  CodeBehind - myListBox.DataContext=this;