首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListView在ListView中的应用

ListView在ListView中的应用
EN

Stack Overflow用户
提问于 2015-10-22 08:40:59
回答 2查看 1.7K关注 0票数 1

是否有可能在一个ListView中生成一个ListView,如果是的话,甚至可以将数据绑定到这两个方面吗?我已经试过了,但是它不起作用,第一个列表是我想要的,但是第二个列表没有显示。

“守则”看起来有点像这样:

代码语言:javascript
复制
<ListView ItemSource="{Binding Item}" x:Name="ListA">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <TextBlock Text="{Binding Day}"/>
                <ListView x:Name="ListB" ItemSoruce="{Binding Item}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Time}"/>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

C#

代码语言:javascript
复制
listA.ItemsSource = timebooking.TimeBookingDataPeriod.TimeBookingData;

希望有人能帮我:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-22 09:27:35

首先,要么选择绑定ItemSource={Binding Item},要么在代码listA.ItemsSource = ...中设置一个覆盖另一个的ItemSource。因此,我将忽略这样一个事实,即您试图在代码中设置它,并使用绑定(这意味着您的视图中设置了一个数据文本)。

代码语言:javascript
复制
<ListView ItemSource="{Binding WeekDays}" x:Name="ListA">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <TextBlock Text="{Binding Day}"/>
                <ListView x:Name="ListB" ItemSource="{Binding TimesOfDay}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Time}"/>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

为了清晰起见,我将您的第一个ItemSource更改为WeekDays,将第二个ItemSource更改为TimesOfDay。这说明了绑定和数据文本的工作方式。

  • 外部ListView (ListA)从外部项继承其DataContext,很可能是您的页面/用户控件。
  • 在ListViewItem中,数据文本将更改为WeekDays集合中的单个项。=>在此树下绑定的每个属性都必须位于WeekDay对象中。
  • 内部ListView (ListB)从ListViewItem继承其DataContext。
  • 在ListViewItem中,DataContext被更改为TimesOfDay集合中的单个项。

每个ListView都是一个新级别的对象。因此,为了使我的示例工作,您需要遵循以下类结构,而不是我将简化代码,只使用属性(而您应该正确地为UI更新实现INotifyPropertyChanged )。

代码语言:javascript
复制
public class SampleViewModel : INotifyPropertyChanged
{
    public ObservableCollection<WeekDay> WeekDays { get; set; } // first listview
}

public class WeekDay
{
    public string Day { get; set; }
    public ObservableCollection<TimeOfDay> TimesOfDay { get; set; } // second listview
}

public class TimeOfDay
{
    public string Time { get; set; }
}

如果要使用页面视图模型中的2个属性,则必须在ListB中使用元素绑定。但这仅适用于场景,因为内部列表视图中的项与外部列表视图中的项不相关。

代码语言:javascript
复制
{Binding ElementName=ListA, Path=DataContext.ItemsForB}
票数 2
EN

Stack Overflow用户

发布于 2015-10-22 09:21:57

  1. ItemsSource而非ItemSource
  2. 下面是一个示例: 公共类ClassB {公共字符串名称{ get;set;}公共ObservableCollectionclassAList { get;set;}/初始化该类的新实例。/ public ClassB() { Name = String.Empty;classAList =新ObservableCollection();} 公共类ClassA {公共字符串标题{ get;set;}}

创建列表:

代码语言:javascript
复制
ObservableCollection<ClassB> list = new ObservableCollection<ClassB>();

Init清单:

代码语言:javascript
复制
ClassB item1 = new ClassB() { Name = "listAItem1" };
            item1.classAList.Add(new ClassA { Caption = "listBItem1" });
            item1.classAList.Add(new ClassA { Caption = "listBItem2" });
            item1.classAList.Add(new ClassA { Caption = "listBItem3" });
            item1.classAList.Add(new ClassA { Caption = "listBItem4" });
            item1.classAList.Add(new ClassA { Caption = "listBItem5" });

            list.Add(item1);


            ClassB item2 = new ClassB() { Name = "listAItem1" };
            item2.classAList.Add(new ClassA { Caption = "listBItem1" });
            item2.classAList.Add(new ClassA { Caption = "listBItem2" });
            item2.classAList.Add(new ClassA { Caption = "listBItem3" });
            item2.classAList.Add(new ClassA { Caption = "listBItem4" });
            item2.classAList.Add(new ClassA { Caption = "listBItem5" });

            list.Add(item1);

            this.DataContext = list;

和XAML:

代码语言:javascript
复制
<ListView ItemsSource="{Binding}" x:Name="ListA">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <TextBlock Text="Day"/>
                        <ListView x:Name="ListB" ItemsSource="{Binding classAList}">
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Caption}"/>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
  1. 似乎您希望创建一个分组列表,在本例中,最好将网格视图与组:好的一步一步的成组网格视图教程一起使用。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33276759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档