我这里有一个 ListView,它显示另一个带有更多项目的 ListView 的项目。 所以我会尝试更好地解释。 对于 ListViewMother 的每一行,我想要一个链接到行数据源的列表视图。 所以我稍后想尝试的是将页面链接到由名为 templatestyle 的字符串给出的特定模板,该模板将提供给 ListviewMother 以选择不同的 ListStyle。 所以我的问题是如何将数据源链接到模板化列表视图?
<Window x:Class="WpfApp2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp2"
mc:Ignorable="d"
Title = "MainWindow" Height = "350" Width = "604">
<Grid>
<ListView Name="ListviewMother">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Margin="20">
<TextBlock Text="aaaaaaa"></TextBlock>
<ListView ItemsSource="{Binding lines}" Background="red"> (listitemson)
<ListView.ItemTemplate>
<DataTemplate>
<Grid Margin="20" >
<TextBox Text="aaaaaaaaaa" Margin="20"/>
<TextBox Text="{Binding linenumber}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Window>
C# 代码
namespace WpfApp2
{
public partial class MainWindow : Window
{
public ObservableCollection<Page> pages = new ObservableCollection<Page>();
public ObservableCollection<line> lines { get; set; } = new ObservableCollection<line>();
public MainWindow()
{
lines.Add(new line() { linenumber = "tsadssdest" });
lines.Add(new line() { linenumber = "tedsfdsfdsst" });
pages.Add(new Page() { Title = "asdsad"});
pages.Add(new Page() { Title = "sdsadad"});
pages.Add(new Page() { Title = "gggdfgs"});
InitializeComponent();
ListviewMother.ItemsSource = pages;
}
}
}
public class Page
{
public string Title { get; set; }
public string TemplateStyle { get; set; }
}
public class line
{
public string linenumber { get; set; }
}
您需要将行集合放入 Page 类中。我对您的代码做了一些修改,以在 ListView 中显示里面的 ListView。
xaml代码是:
<Grid>
<ListView Name="ListviewMother">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Margin="20">
<TextBlock Text="{Binding Title}"></TextBlock>
<ListView ItemsSource="{Binding lines}" Background="red">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Margin="2" >
<TextBox Text="{Binding linenumber}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
cs代码是:
public partial class MainWindow : Window
{
public ObservableCollection<Page> pages = new ObservableCollection<Page>();
public MainWindow()
{
pages.Add(new Page() { Title = "Page1",lines=new ObservableCollection<line>() { new line() { linenumber="Line1_1"}, new line() { linenumber = "Line1_2" }, new line() { linenumber = "Line1_3" } } });
pages.Add(new Page() { Title = "Page2",lines=new ObservableCollection<line>() { new line() { linenumber="Line2_1"}, new line() { linenumber = "Line2_2" }, new line() { linenumber = "Line2_3" } } });
pages.Add(new Page() { Title = "Page3" });
InitializeComponent();
ListviewMother.ItemsSource = pages;
}
}
public class Page
{
public string Title { get; set; }
public string TemplateStyle { get; set; }
public ObservableCollection<line> lines { get; set; } = new ObservableCollection<line>();
}
public class line
{
public string linenumber { get; set; }
}