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的东西,但我不确定,我不明白它是如何工作的.我知道它在源是一个对象时有效,但在这种情况下它是一个对象列表,我不知道如何获取信息.
要根据事件的类型绘制具有不同颜色的边框,首先应为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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)