我有这个:
public MyView: UserControl
{
public IList<Person> PersonList { get; set; }
public MyView()
{
//code
}
public void Display(MyData myData)
{
DataContext=myData;
}
//code
}
这个XAML包括一个ComboBox:
ItemsSource="{Binding RelativeSource={RelativeSource Self}, Path=PersonList}"
由于某种原因,这不起作用,并且组合框不会被填充(但是,如果我使用代码隐藏,我说comboBox.ItemsSource = PersonList,那么组合框确实填充了。)
有什么想法吗?
此致 MadSeb
答案 0 :(得分:0)
您的属性设置为私有,并且您确定要设置DataContext。
*编辑*
根据您在上面所做的更改,您将错误地设置datacontext。您的“PersonList”是MyView类中的IList<>
,但您将数据上下文设置为其他内容。
尝试在MyView中向PersonList添加项目并设置this.DataContext = this;
此外,根据建议,将IList<>
切换为ObservableCollection<>
。
我还强烈建议您阅读模型视图ViewModel(MVVM)方法。它会有很多帮助。 Josh Smith有很多关于MVVM方法的好文章(并且也写了一本关于它的好书)。
这是他blog的链接。他的书也与之相关。
答案 1 :(得分:0)
我怀疑这是因为你没有解雇任何属性改变的事件。如果在首次设置属性值时未通知UI,则绑定将不会更新。查看INotifyPropertyChanged
界面并在您的课程中实现它。
同样,如果您的IList
属性不是ObservableCollection
或未实现INotifyCollectionChanged
,那么当您向列表中添加项目时,数据绑定UI将不会反映这一点。
答案 2 :(得分:0)
我相信你的约束性陈述是问题 “{Binding RelativeSource = {RelativeSource Self},Path = PersonList}”正在组合框本身上寻找“PersonList”。
您是否在输出窗口中看到任何绑定错误?
理想情况下,您希望绑定到DataContext(MyData)中的属性