WPF填充具有集合成员属性的列表框

时间:2015-04-11 18:47:53

标签: c# wpf xaml listbox

我在我的WPF应用程序中的某些列表中显示的食谱列表。 我有一些食谱

public Cookbook()
{
   RecipeList=new ObservableCollection<Recipe>();
   AddRecipe(new Recipe("Food1", 0, null));
}

每个食谱都有名为Name。public string Name { get; set; }

的属性

我现在正在做的是我用这个集合填充列表

<ListView x:Name="CategoriesListBox" Margin="10,0,10,0" ItemsSource="{Binding RecipeList}"
        Loaded="CategoriesListBox_OnLoaded" 
        SelectionChanged="CategoriesListBox_SelectionChanged">
        <ListBox.DataContext>
           <Implementation:Cookbook/>
        </ListBox.DataContext>
</ListView>

当然结果列在用对象名填充的列表中 - 我希望列表中的食谱名称。有没有办法在列表框中显示属性名称?

(我正在寻找XAML解决方案 - 后面没有代码)

//我已经尝试过ListView和嵌套的Gridview作为解决方案 - 这可以工作,但这也会在顶部创建不必要的网格和标题字段。

<ListView x:Name="CategoriesListBox" Margin="10,0,10,0" ItemsSource="{Binding RecipeList}"
    Loaded="CategoriesListBox_OnLoaded" 
    SelectionChanged="CategoriesListBox_SelectionChanged">
    <ListBox.DataContext>
        <Implementation:Cookbook/>
    </ListBox.DataContext>

    <ListView.View>
        <GridView AllowsColumnReorder="False">
            <GridView.Columns>
                <GridViewColumn DisplayMemberBinding="{Binding Path=Name, Mode=OneWay}" />
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>

由于

2 个答案:

答案 0 :(得分:2)

使用ListView的DisplayMemberPath属性。 将其设置为Name

DisplayMemberPath="Name"

https://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.displaymemberpath(v=vs.110).aspx

答案 1 :(得分:1)

使用ListBox而不是ListView,并设置其DisplayMemberPath属性:

<ListBox ItemsSource="{Binding RecipeList}" DisplayMemberPath="Name" .../>

或设置其ItemTemplate属性:

<ListBox ItemsSource="{Binding RecipeList}" ...>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>