2010-11-08 7 views
0

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

По какой-то причине это не работает и в поле со списком не получает заселена (однако, если я использую code-behind и я говорю comboBox.ItemsSource = PersonList, тогда поле со списком заполняется).

Любые идеи?

С уважением, MadSeb

ответ

0

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

* EDIT *

На основе изменения вы сделали выше, вы устанавливаете ваш DataContext неправильно. Ваш «PersonList» - это IList<> в вашем классе MyView, но вы настраиваете свой контекст данных на что-то еще.

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

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

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

+0

Я попытался сделать собственности общественности и никакого результата. И я уверен, что устанавливаю DataContext. Я только что изменил свой первоначальный пост, чтобы уточнить. – MadSeb

0

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

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

+0

, как ни странно, я строю IList как наблюдаемый набор – MadSeb

0

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

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

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

Смежные вопросы