我将从我的代码的精简/消毒版本开始:
型号:
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列表初始化但是为空,当某些东西试图绑定到例如列表中的第一个元素时,预期的行为是什么?我的理解是它只是忽略了约束力;那是真的吗?
答案 0 :(得分:3)
是的,它会忽略绑定。如果随后将一个项添加到空列表中,则文本块将不会更新,因为与它们关联的绑定表达式将不知道发生了更改。
适当的解决方案是使用:
public class DataContextObj
{
public ObservableCollection<DataObj> DataItems {get; private set; }
}
对集合的添加将通知“Item []”已更改,这将允许绑定表达式重新评估。