ListViewItems

时间:2016-04-21 02:36:30

标签: c# wpf xaml

我有一个包含许多ListViewItem的List视图,但每个ListViewItem可以有一行或多行文本。

我需要的是强制每个ListViewItem作为自己的内容垂直拉伸。

ListView是否可行?

有另一种控制允许我这样做吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您使用MVVM和DataTemplates动态生成ListViewItems,则默认情况下这样做。这是一个很好的例子。

MainWindow.xaml

<ListView ItemsSource="{Binding items}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Label Content="{Binding text}" />
                <ListView ItemsSource="{Binding strings}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <Label Content="{Binding}" />
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

MainViewModel&amp; ListItemViewModel

public class MainViewModel
{
    public List<ListItemViewModel> items { get; set; }
    public MainViewModel()
    {
        List<ListItemViewModel> things = new List<ListItemViewModel>();
        List<string> temp = new List<string>();
        for (int i = 0; i < 5; i++)
        {
            temp.Add(i + "");
            things.Add(new ListItemViewModel()
            {
                text = "item"+i,
                strings = temp.ToList<string>()
            });

        }
        items = things;
    }
}

public class ListItemViewModel
{
    public String text { get; set; }
    public List<string> strings { get; set; }

}

如下面评论中所述,这是一个非常快速抛出的演示,并且ViewModel不包含任何INotifyPropertyChanged事件。由于此原因,UI不会自动反映ViewModel中的更改。