Проблема привязки пользовательского элемента управления WPF?

У меня есть это:

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

3 ответа

Решение

Ваше свойство установлено как частное, и вы уверены, что устанавливаете DataContext.

* РЕДАКТИРОВАТЬ *

Исходя из внесенных выше изменений, вы неверно настраиваете свой текст данных. Ваш "PersonList" являетсяIList<> в вашем классе MyView, но вы устанавливаете контекст данных на что-то другое.

Попробуйте добавить элементы в PersonList в MyView и настроить this.DataContext = this; Кроме того, как предложено, переключите ваш IList<> для ObservableCollection<>,

Я также настоятельно рекомендую ознакомиться с подходом Model View ViewModel (MVVM). Это очень поможет. У Джоша Смита есть много хороших статей о подходе MVVM (и он написал хорошую книгу об этом тоже).

Вот ссылка на его блог. Его книга также связана там.

Я подозреваю, что это потому, что вы не запускаете никаких событий, измененных собственностью. Если вы не уведомите свой пользовательский интерфейс, когда значение свойства будет впервые установлено, привязка не будет обновлена. Заглянуть в INotifyPropertyChanged интерфейс и реализовать его в своем классе.

Точно так же, если ваш IList собственность не ObservableCollection или не реализует INotifyCollectionChangedзатем, когда вы добавляете элементы в список, пользовательский интерфейс с привязкой к данным не будет отражать это.

Я считаю, что ваше обязательное заявление является проблемой.
"{Binding RelativeSource = {RelativeSource Self}, Path = PersonList}" ищет "PersonList" в самом поле со списком.

Вы видите какие-либо ошибки привязки в окне вывода?

В идеале вы хотите привязать к свойству в вашем DataContext (MyData)

Другие вопросы по тегам