我有一个包含许多ListViewItem的List视图,但每个ListViewItem可以有一行或多行文本。
我需要的是强制每个ListViewItem作为自己的内容垂直拉伸。
ListView是否可行?
有另一种控制允许我这样做吗?
答案 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中的更改。