我有一个对象列表(ObservableCollection subjectlist),并希望通过数据绑定和依赖属性在Combobox中显示它们。
WPF Data Binding to a Combo Box
我在stackoverflow上搜索并试图在上面的链接中实现Craig Suchanec的解决方案。 (现在尝试了一整天,我只是不知道我的代码有什么问题)
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public static readonly DependencyProperty SubjectListProperty =
DependencyProperty.Register("SubjectList",
typeof(ObservableCollection<Subject>),
typeof(MainWindow));
private ObservableCollection<Subject> subjectList = new ObservableCollection<Subject>();
Initialization init1;
public ObservableCollection<Subject> SubjectList
{
get { return (ObservableCollection<Subject>)GetValue(SubjectListProperty); }
// get { return subjectList; }
}
public MainWindow()
{
init1 = new Initialization();
subjectList = init1.createMenuSubject();
InitializeComponent();
//this.comboBox.DataContext = SubjectList;
}
}
MainWindow.xaml
<Grid>
<ComboBox x:Name="comboBox" HorizontalAlignment="Left"VerticalAlignment="Top" Width="120" Margin="321,10,0,0"
ItemsSource="{Binding ElementName=mainWindow, Path=SubjectList}" DisplayMemberPath="Name"/>
</Grid>
如果我只设置DataContext并且没有依赖属性工作,那么它可以正常工作,但是一旦我尝试使用依赖属性进行数据绑定它就没有了,我没有看到我的实现和链接中给出的解决方案。
如果有人能帮我解决这个问题,我将不胜感激。
答案 0 :(得分:0)
我无法在代码中的任何位置看到您实际设置SubjectList属性的值。
但是您设置了subjectList的值,但是您要绑定到SubjectList。注意套管差异。
答案 1 :(得分:0)
你应该写:
public ObservableCollection<Subject> SubjectList
{
set { base.SetValue(SubjectListProperty, value); }
get { return (ObservableCollection<Subject>)base.GetValue(SubjectListProperty); }
}
而不是
public ObservableCollection<Subject> SubjectList
{
set { base.SetValue(SubjectListProperty, value); }
get { return subjectList; }
}
或任何其他ad hoc格式。您正在构造函数 MainWindow()中设置 subjectList ,但是,它不会设置 SubjectList (使用Capital S)和属性的值永远不会提出改变事件。删除 subjectList 。
如果您想知道为什么 DataContext 方法有效,您应该注意即使您不使用 DepenedencyProperty 它也能正常工作。但是,如果您实现 INotifyPropertyChange ,它也可以设置 ElementName 。