列表项模板中的 WPF 嵌套列表视图

问题描述 投票:0回答:1

我这里有一个 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; }

}
c# wpf visual-studio
1个回答
1
投票

您需要将行集合放入 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; }
}

结果图是这样的: enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.