WPF,ListBox中没有任何内容

时间:2010-08-17 14:18:44

标签: c# wpf xaml listbox itemssource

我不知道我在这里做错了什么。我有一个ListBox DataContextItemsSource已设置,但在运行我的应用时,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 个答案:

答案 0 :(得分:7)

您无法绑定到方法。使它成为一个属性,它应该工作。

虽然将List设置为DataContext,但创建一个包含列表的ViewModel会更好。实际上,您可以更好地控制Listbox将绑定到的实例。

希望这有帮助!

答案 1 :(得分: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"/>