c# – 将ListView字段绑定到嵌套列表WPF

c# – 将ListView字段绑定到嵌套列表WPF,第1张

概述我有以下课程: class Event {int eserc {get;set;}int type {get;set;}}class Sequence {List<Event> events;int freq {get;set;}} 如您所见,我在Sequence中有一个事件列表.我有一个Sequence列表.我想用一个带有序列列表的GridView显示一个ListView.对于每 我有以下课程:

class Event {int eserc {get;set;}int type {get;set;}}class Sequence {List<Event> events;int freq {get;set;}}

如您所见,我在Sequence中有一个事件列表.我有一个Sequence列表.我想用一个带有序列列表的GrIDVIEw显示一个ListVIEw.对于每个序列,我想要有2列,一列具有属性freq的值,另一列应该具有与该序列相关联的事件列表.例如:


第一行与第一个序列相关.矩形的颜色代表事件的类型.在第一个序列中有以下事件:

> eserc 1类型“红色”
> eserc 2类型“红色”
> eserc 3类型“绿色”
> eserc 4类型“红色”

我知道我必须进行绑定才能显示值,但我不知道如何为序列执行此 *** 作,因为我应该将列的值绑定到每个单个Sequence中的Event对象的值.这就是我为ListVIEw编写的代码:

<ListVIEw name="resultsList" GrID.Row="5" GrID.Column="1"                  GrID.ColumnSpan="3">    <ListVIEw.VIEw>                <GrIDVIEw>            <GrIDVIEwColumn header="Sequence" WIDth="450"                                    displayMemberBinding="{Binding events}"/>            <GrIDVIEwColumn header="Frequence"                                     displayMemberBinding="{Binding freq}"/>        </GrIDVIEw>    </ListVIEw.VIEw></ListVIEw>

当然,绑定事件是错误的,因为只有当它是一个字符串时才会起作用,但这就是想法.
我在互联网上搜索,我认为我应该使用类似DataTemplate的东西,但我不确定,我不明白它是如何工作的.我知道它在源是一个对象时有效,但在这种情况下它是一个对象列表,我不知道如何获取信息.

解决方法 要实现这一点,您需要在第一个GrIDVIEwColumn中定义另一个列表,列表应该是水平的(编辑ItemsPanelTemplate).您可以使用ListVIEw,ListBox或ItemsControl(看起来最合适).

要根据事件的类型绘制具有不同颜色的边框,首先应为ItemsControl项定义自定义DataTemplate,并使用DataTrigger设置颜色,这里是完整的xaml:

<ListVIEw name="ResultsList"              ItemsSource="{Binding SequenceCollection}">        <ListVIEw.VIEw>            <GrIDVIEw>                <GrIDVIEwColumn header="Sequence" WIDth="450" >                    <GrIDVIEwColumn.CellTemplate>                        <DataTemplate>                            <ItemsControl ItemsSource="{Binding Events}">                                <ItemsControl.ItemsPanel>                                   <ItemsPanelTemplate>                                       <StackPanel OrIEntation="Horizontal"></StackPanel>                                   </ItemsPanelTemplate>                               </ItemsControl.ItemsPanel>                                <ItemsControl.ItemTemplate>                                    <DataTemplate>                                        <border>                                            <border.Style>                                                <Style targettype="border">                                                    <Style.Triggers>                                                        <DataTrigger Binding="{Binding Type}" Value="red">                                                            <Setter Property="Background" Value="red"/>                                                        </DataTrigger>                                                        <DataTrigger Binding="{Binding Type}" Value="green">                                                            <Setter Property="Background" Value="Green"/>                                                        </DataTrigger>                                                    </Style.Triggers>                                                </Style>                                            </border.Style>                                            <TextBlock Text="{Binding Eserc,StringFormat='{}{0} '}"></TextBlock>                                        </border>                                    </DataTemplate>                                </ItemsControl.ItemTemplate>                            </ItemsControl>                        </DataTemplate>                    </GrIDVIEwColumn.CellTemplate>                </GrIDVIEwColumn>                <GrIDVIEwColumn header="Frequence"                                 displayMemberBinding="{Binding Freq}"/>            </GrIDVIEw>        </ListVIEw.VIEw>    </ListVIEw>

SequenceCollection:

private ObservableCollection<Sequence> _sequenceCollection =new ObservableCollection<Sequence>()    {        new Sequence(){Events = new ObservableCollection<Event>()        {            new Event(){Eserc=1,Type = "red"},new Event(){Eserc=2,new Event(){Eserc=3,Type = "green"},new Event(){Eserc=4,},Freq = 3}    };    public ObservableCollection<Sequence> SequenceCollection    {        get { return _sequenceCollection; }        set        {            if (Equals(value,_sequenceCollection)) return;            _sequenceCollection = value;            OnPropertyChanged();        }    }

这里有你需要的邻接课程:

public class Event{    public int Eserc { get; set; }    public string Type { get; set; }}public class Sequence{    public ObservableCollection<Event> Events { get; set; }    public int Freq { get; set; }}

输出:

在一边:

>确保定义公共属性以便能够正确绑定它们>使用命名约定>使用ObservableCollection而不是List(它们实现ICollectionChanged,这对于更改通知很方便)>不要忘记实现INotifyPropertyChanged接口

总结

以上是内存溢出为你收集整理的c# – 将ListView字段绑定到嵌套列表WPF全部内容,希望文章能够帮你解决c# – 将ListView字段绑定到嵌套列表WPF所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1233131.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存