Поведение привязки данных Silverlight DataContext - PullRequest
3 голосов
/ 30 сентября 2011

Я начну с урезанной / санированной версии моего кода:

Модель:

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 Ответ

3 голосов
/ 30 сентября 2011

Да, он будет игнорировать привязку. Если впоследствии элемент будет добавлен в пустой список, текстовые блоки не будут обновляться, поскольку связывающее выражение, связанное с ними, не будет знать, что изменение произошло.

Подходящим решением является использование:

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

Добавление в коллекцию уведомит об изменении «Item []», что позволит переоценивать выражение привязки.

...