2010-11-08 114 views
0

我有这样的:WPF用户控件绑定问题?

public MyView: UserControl 
{ 
    public IList<Person> PersonList { get; set; } 

    public MyView() 
    { 
    //code 
    } 

    public void Display(MyData myData) 
    { 
    DataContext=myData; 
    } 
    //code 
} 

这样做的XAML包括组合框:

ItemsSource="{Binding RelativeSource={RelativeSource Self}, Path=PersonList}" 

出于某种原因,这并不工作,并在组合框中没有得到填充(但是,如果我使用代码隐藏,我说comboBox.ItemsSource = PersonList组合框然后填充)。

任何想法?

问候, MadSeb

回答

0

你的属性设置为私有的,你确定你设置的DataContext。

*编辑*

根据您在上面做,你正确设置你的DataContext变化。您的“PersonList”是MyView类中的IList<>,但您将数据上下文设置为其他内容。

尝试将项目添加到MyView中的PersonList并设置this.DataContext = this;另外,根据建议,将IList<>切换为ObservableCollection<>

我也强烈建议阅读模型视图ViewModel(MVVM)方法。它会帮助很多。 Josh Smith有很多关于MVVM方法的好文章(并且也写了一本关于它的好书)。

这里是他的链接blog。他的书也与此有关。

+0

我试图使财产公开和没有结果。我确定我正在设置DataContext。我只是对我最初的帖子进行了修改以澄清。 – MadSeb 2010-11-08 15:35:54

0

我怀疑这是因为你没有发射任何属性更改的事件。如果您在第一次设置属性值时未通知用户界面,则绑定不会更新。查看INotifyPropertyChanged界面并在课堂上实施。

同样,如果您的IList属性不是ObservableCollection或未实现INotifyCollectionChanged,那么当您将项目添加到列表中时,数据绑定UI将不会反映此内容。

+0

奇怪的是,我将IList构建为ObservableCollection – MadSeb 2010-11-08 16:13:24

0

我相信你的绑定语句是问题。
“{Binding RelativeSource = {RelativeSource Self},Path = PersonList}”正在查找组合框本身的“PersonList”。

您是否在输出窗口中看到任何绑定错误?

理想情况下,你会想绑定到你的DataContext(迈德特)属性