Проблема привязки пользовательского элемента управления WPF? - PullRequest
0 голосов
/ 08 ноября 2010

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

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 ]

0 голосов
/ 08 ноября 2010

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

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

0 голосов
/ 08 ноября 2010

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

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

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

0 голосов
/ 08 ноября 2010

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

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

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

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

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

Вот ссылка на его блог .Там же и его книга.

...