WPF用户控件绑定问题?

时间:2010-11-08 15:21:27

标签: wpf binding itemssource

我有这个:

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

3 个答案:

答案 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)中的属性