WPF, ничего не отображается в ListBox - PullRequest
1 голос
/ 17 августа 2010

Я не знаю, что я делаю здесь не так.У меня есть 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 объектов.

Ответы [ 2 ]

7 голосов
/ 17 августа 2010

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

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

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

1 голос
/ 17 августа 2010

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

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"/>
...