绑定ComboBox ItemsSource在WPF中不起作用
这有点奇怪,因为我在那里发现的每个例子都说我正在以正确的方式做事但我无法让我的ComboBox绑定在WPF中工作。
我刚刚创建了一个空的WPF应用程序。
public List myCollection { get; set; } public MainWindow() { DataContext = this; InitializeComponent(); myCollection = new List {"test1", "test2", "test3", "test4"}; }
这是我的xaml:
我试过Binding myCollection,Binding Path = myCollection,我尝试过设置DataContext和不设置DataContext。 似乎没有什么工作。
我已经没有想法了,我发现的每个例子都说这是正确的方法,它应该工作,所以感谢任何帮助我推进。
在InitializeComponent
之后设置datacontext
InitializeComponent(); myCollection = new List { "test1", "test2", "test3", "test4" }; DataContext = this;
在构造函数的末尾
comboBox1.ItemsSource = myCollection;
Sajeetheran的回答是有效的,因为XAML对象的初始化会查看当前状态并绑定当时的状态,但如果将属性更改为其他属性,则会失败。 我认为这是一次性 的解决方案 。
我只是想用绑定来做这件事
对于大多数WPF场景,人们希望使用INotifyPropertyChange
机制来允许XAML绑定处理动态更改。 如果想要真正使用绑定的力量,它与INotifyPropertyChange
携手并进。 否则,迪米特里的答案与萨杰特哈兰的答案一样有效。
绑定不知道更改,因为myCollection
的引用不会通知世界状态的变化; 因此数据不会显示。
为了便于此类通知,用于保存属性的类需要遵守INotifyPropertyChanged
,并且属性myCollection
需要发送通知事件。 ( 请注意,在您的情况下,它是主窗口,在技术上可行,但在MVVM范例中,人们希望从dat中分离视图,而ViewModel
类用于保存实际数据并提供此通知 )。
public MainWindow : INotifyPropertyChanged
然后提供将由绑定目标订阅到DataContext
上的项的事件:
public event PropertyChangedEventHandler PropertyChanged;
然后提供改变事件的机制。
/// /// Raises the PropertyChanged event. /// /// The name of the property that has changed. protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "") { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } }
然后提供myCollection
的更改
private List _myCollection; public List myCollection { get { return _myCollection; } set { _myCollection= value; OnPropertyChanged("myCollection"); } }
public List myCollection { get; set; } public MainWindow() { myCollection = new List {"test1", "test2", "test3", "test4"}; DataContext = this; InitializeComponent(); //-- call it at the end }
分配数据上下文后,您必须使用InitializeComponent
。