Проблема привязки пользовательского элемента управления 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)