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;