WPF, ничего не отображается в ListBox

Вопрос:Я не знаю, что я здесь делаю неправильно. У меня есть ListBox, где DataContext и ItemsSource установлены, но ничего не работает в ListBox при запуске моего приложения. При отладке первая строка моего метода для получения элементов для ListBox никогда не попадает. Вот что у меня есть: // Constructor in UserControl public TemplateList() { _templates =

Вопрос:

Я не знаю, что я здесь делаю неправильно. У меня есть ListBox, где DataContext и ItemsSource установлены, но ничего не работает в ListBox при запуске моего приложения. При отладке первая строка моего метода для получения элементов для ListBox никогда не попадает. Вот что у меня есть:

// Constructor in UserControl public TemplateList() { _templates = new Templates(); InitializeComponent(); DataContext = this; } // ItemsSource of ListBox public List<Template> GetTemplates() { if (!tryReadTemplatesIfNecessary(ref _templates)) { return new List<Template> { // Template with Name property set: new Template(«No saved templates», null) }; } return _templates.ToList(); }

Здесь мой XAML:

<ListBox ItemsSource=»{Binding Path=GetTemplates}» Grid.Row=»1″ Grid.Column=»1″ Width=»400″ Height=»300″ DisplayMemberPath=»Name» SelectedValuePath=»Name»/>

В экземпляре класса Template существует свойство Name, которое является всего лишь string. Все, что я хочу, это отобразить список имен шаблонов. Пользователь не будет изменять какие-либо данные в Template, ListBox просто должен быть доступен только для чтения.

Шаблон также имеет свойство Data, которое я позже покажу в этом ListBox, поэтому я не хочу, чтобы GetTemplates возвращал только список строк – ему нужно вернуть некоторую коллекцию Template объектов.

Лучший ответ:

Вы не можете привязываться к методу. Сделайте это свойством, и оно должно работать.

Лучше всего установить List как DataContext или создать ViewModel, который содержит список. Thay way, у вас будет больше контроля над экземплярами, к которым будет привязан Listbox.

Надеюсь, это поможет!

Ответ №1

Вы пытаетесь вызвать метод в своей привязке, когда вы должны использовать свойство. Измените его на свойство, и вам должно быть хорошо идти.

public List<Template> MyTemplates {get; private set;} public TemplateList() { InitializeComponent(); SetTemplates(); DataContext = this; } // ItemsSource of ListBox public void SetTemplates() { // do stuff to set up the MyTemplates proeprty MyTemplates = something.ToList(); }

Xaml:

<ListBox ItemsSource=»{Binding Path=MyTemplates}» Grid.Row=»1″ Grid.Column=»1″ Width=»400″ Height=»300″ DisplayMemberPath=»Name» SelectedValuePath=»Name»/>

Оцените статью
Добавить комментарий