WPF: привязка источника элементов списка из модели представления в MVVM

Я безуспешно пытаюсь установить свойство ItemSource для просмотра списка.

Просмотр (xaml):

<ListView Margin="10" Name="MyLv" ItemsSource="{Binding}">
....
</ListView>

Конструктор кода программной части (xaml.cs):

    public MyView()           
    {
        InitializeComponent();
    }

Модель представления:

    private List<DataModel> lstData = null;
    public MyViewModel()
    {          
        this.lstData = this.LoadData();  // this connects to a database an extract info to be loaded in listview
    }

Модель данных:

public class DataModel
{
    public bool IsSelected { get; set; }
    public string ID { get; set; }
    public string Desc { get; set; }     
}

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


person Ralph    schedule 20.06.2017    source источник
comment
См. здесь: stackoverflow.com/a/44646122/1136211   -  person Clemens    schedule 20.06.2017


Ответы (1)


Основываясь на коде, который вы разместили, есть пара проблем:

  1. Вы не установили DataContext представления. Обычно вы хотите установить это на экземпляр вашего класса модели представления.

  2. ViewModel не предоставляет список как общедоступное свойство. Привязки WPF работают только с общедоступными свойствами. ItemsSource должно быть привязано к этому свойству, а не к самому DataContext.

Наконец, вы, вероятно, захотите, чтобы коллекция в ViewModel была ObservableCollection. Таким образом, когда в коллекцию вносятся изменения, список в пользовательском интерфейсе будет автоматически обновляться.

person Andy    schedule 20.06.2017
comment
По сути, <ListView Margin="10" Name="MyLv" ItemsSource="{Binding Path=lstData}">, но это не сработает, пока вы сначала не исправите все остальное, о чем @Andy упоминает в этом ответе. - person Bradley Uffner; 20.06.2017