Вам необходимо связать свой ListView
ItemsSource
с коллекцией экземпляров вашего класса (я рекомендую использовать ObservableCollection для этого). Например, вы можете поместить коллекцию в ListView
's DataContext
. Тогда привязка будет просто
<ListView ItemsSource={Binding} .../>
Это более полезно, чтобы создать класс, чтобы содержать эту коллекцию вместе с другими предметами, которые ваш UserControl
могут потребовать и передавать экземпляр этого класса UserControl
«s DataContext
. Это относится к рисунку MVVM.
EDIT
Вы можете установить DataContext либо в коде, сзади или в XAML. Скажем, у нас есть класс с коллекцией:
public class ViewModel
{
public ViewModel()
{
Products = new ObservableCollection<Product>()
{
new Product("book"),
new Product("chair"),
new Product("table"),
new Product("bookshelf"),
}
}
ObservableCollection<Product> Products { get; set; }
}
Вот как установить DataContext UserControl в коде:
userControl.DataContext = new ViewModel();
где UserControl является экземпляром вашего UserControl.
Вот как это сделать в в XAML:
<UserControl ...
xmlns:vm="namespace_containing_class_ViewModel">
<UserControl.DataContext>
<!-- Following line instantiates the ViewModel class and calls its parameterless constructor -->
<vm:ViewModel />
</UserControl.DataContext>
...
<ListView ItemsSource="{Binding Products}"/>
...
</UserControl>
Оба варианта делают то же самое. Обратите внимание, что ItemsSource="{Binding Products}"
означает, что для свойства Binding.Path
установлено значение «Продукты», и этот путь будет искать в DataContext ListView. Если DataContext ListView явно не задан (как в вышеупомянутом случае), DataContext совпадает с DataContext родителя. Если родительский DataContext не установлен, то он совпадает с DataContext родительского родителя и так далее. Поэтому в этом случае DataContext ListView аналогичен DataContext UserControl и является экземпляром класса ViewModel, который содержит коллекцию продуктов. Та-да! :)
Можете ли вы указать пример кода для установки DataContext. Как только DataContext установлен, будет ли ItemsSource = {Binding} позаботиться о привязке? – Harsh
см. Мое редактирование – EvAlex
Большое спасибо @EvAlex. :) – Harsh