0

我有这个:

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

4

3 回答 3

0

我怀疑这是因为您没有触发任何属性更改事件。如果首次设置属性值时未通知 UI,则绑定不会更新。查看INotifyPropertyChanged接口并在您的类中实现它。

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

于 2010-11-08T15:42:01.800 回答
0

您的属性设置为私有,并且您确定要设置 DataContext。

* 编辑 *

根据您在上面所做的更改,您设置的数据上下文不正确。您的“PersonList”IList<>在您的 MyView 类中,但您正在将数据上下文设置为其他内容。

尝试在 MyView 中将项目添加到 PersonList 并设置this.DataContext = this; 此外,按照建议,将您的切换IList<>ObservableCollection<>.

我还强烈建议阅读 Model View ViewModel (MVVM) 方法。这将有很大帮助。Josh Smith 有很多关于 MVVM 方法的好文章(并且还写了一本关于它的好书)。

这是他博客的链接。他的书也链接在那里。

于 2010-11-08T15:24:01.023 回答
0

我相信您的约束性声明是问题所在。
“{Binding RelativeSource={RelativeSource Self}, Path=PersonList}”正在组合框本身上寻找“PersonList”。

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

理想情况下,您希望绑定到 DataContext (MyData) 中的属性

于 2010-11-08T18:14:23.033 回答