我有一个小的测试窗口,如下所示:为什么这个ComboBox数据绑定不起作用?
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ComboBox x:Name="Combo" DisplayMemberPath="Word" ItemsSource="{Binding Numbers}" HorizontalAlignment="Left" Margin="115,27,0,0" VerticalAlignment="Top" Width="120" />
</Grid>
</Window>
随着后台代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Numbers = new ObservableCollection<NumberWord>
{
new NumberWord {Number = 1, Word = "One"},
new NumberWord {Number = 2, Word = "Two"},
new NumberWord {Number = 3, Word = "Three"}
};
Combo.ItemsSource = Numbers;
}
public ObservableCollection<NumberWord> Numbers { get; set; }
}
我一直看到答案,这说明我的其他具有约束力的问题的Combo.ItemsSource = Numbers;
明确设置是不必要的,因为我有约束力ItemsSource="{Binding Numbers}"
。我也被多次告知,我不需要在Combo
上设置DataContext
,因为整个窗口是数据上下文,并且Combo
继承了这个数据上下文。
我的问题是,为什么我总是 - 不仅仅是这个组合 - 在后面的代码中显式设置ItemsSource
或其他绑定属性。为什么XAML数据绑定不起作用?
我不需要实现'INotifyPropertyChanged'因为什么都不改变,而'Numbers'只是数据上下文的一个成员,所以我设置'DataContext = Numbers'将是愚蠢的。其他控件将共享此数据上下文,并希望绑定到“数字”以外的成员。 – ProfK
@ProfK:你说得对,也许最好的选择是使用MVVM的多个控件和单个数据上下文。对不起,我更正了更改的答案this.DataContext = this; – UFO