Silverlight DataContext数据绑定行为

时间:2011-09-29 22:57:16

标签: silverlight data-binding datacontext

我将从我的代码的精简/消毒版本开始:

型号:

class DataObj : INotifyPropertyChanged {
    // these actually call OnPropertyChanged, and have associated private variables
    public string Name { get; set; }
    public int Age { get; set; }
}

class DataContextObj : INotifyPropertyChanged {
    public List<DataObj> DataItems { get; set; }
}

查看:

<StackPanel x:Name="MyPanel">
    <TextBlock Text="{Binding Path=DataItems[0].Name}" />
    <TextBlock Text="{Binding Path=DataItems[0].Age}" />
</StackPanel>

查看代码隐藏:

//in the constructor
MyPanel.DataContext = new DataContextObj();

现在,我的问题是,如果DataItems列表初始化但是为空,当某些东西试图绑定到例如列表中的第一个元素时,预期的行为是什么?我的理解是它只是忽略了约束力;那是真的吗?

1 个答案:

答案 0 :(得分:3)

是的,它会忽略绑定。如果随后将一个项添加到空列表中,则文本块将不会更新,因为与它们关联的绑定表达式将不知道发生了更改。

适当的解决方案是使用:

  public class DataContextObj
  {
        public ObservableCollection<DataObj> DataItems {get; private set; }
  }

对集合的添加将通知“Item []”已更改,这将允许绑定表达式重新评估。