wpf绑定嵌套列表
我想在列表视图中显示这个嵌套列表。wpf绑定嵌套列表
例如,如果EventItem有响应,我需要为每个响应重复事件名称x time。每个响应都有3个复选框关联。
我所试图做的是在列表中显示:
事件名称 - >响应选项 - >查看努力的邮箱。
我不想使用树,因此列表单行。有任何想法吗?
UPDATE:
可以说我有2个事件和事件1有2个选项和事件2的3个选项。每个选项将有3个复选框。
我怎么想显示的数据是这样的:
Event 1 Response A [X] [ ] [ ]
Event 1 Response B [ ] [X] [X]
Event 2 Response A [X] [X] [X]
Event 2 Response D [ ] [ ] [X]
Event 2 Response E [X] [X] [X]
有了回应,我需要重复的事件名称。
public class EventItem: DataAttributeChecked
{
public EventItem(int primaryKey, string value) : base(primaryKey, value)
{
ResponseOptions = new List<ResponseOption>();
}
public List<ResponseOption> ResponseOptions { get; set; }
}
public class ResponseOption: DataAttribute
{
public ResponseOption(int primaryKey, string value, int eventId) : base(primaryKey, value)
{
_eventId = eventId;
LevelOfEfforts = new List<DataAttributeChecked>();
}
public List<DataAttributeChecked> LevelOfEfforts { get; set; }
private readonly int _eventId;
public int EventId
{
get { return _eventId; }
}
}
<ListBox.ItemTemplate>
<DataTemplate>
<Border Margin="3" CornerRadius="2" BorderBrush="CadetBlue" BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal">
<CheckBox IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" />
<TextBlock Text="{Binding Value}" VerticalAlignment="Center"/>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal">
<TextBlock Text="{Binding ResponseOption.Value}" VerticalAlignment="Center"/>
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding ResponseOptions.LevelOfEffort}"
Name="lstOption"
SelectionMode="Multiple" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding Path=IsChecked, Mode=TwoWay}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="3,3,3,3">
<CheckBox IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" />
<TextBlock Text="{Binding Value}" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
如果该列表是嵌套的,你有树, 对于您可以使用一个HierarchicalDataTemplate 并显示在一个TreeView或嵌套列表视图。
如果你想查看一个平面列表, 有你的视图模型扁平化树, 假设你使用的是MVVM模式。
我没有在这个项目中使用MVVM模式。你还能如何将视野变平?我刚刚更新了原来的问题。 – nitefrog 2011-04-04 21:44:17
通过将您的设计更改为MVVM :-)通过引入ViewModel,MVVM的一个主要特点是能够将View和Model的设计相互分离。 – 2011-04-05 10:35:35
嗯。我会建议你重写ListBox的ItemsPanel来水平显示它的项目......但是我看到你*正在做这件事。什么不正确? – 2011-04-04 21:35:10
我刚更新了更好的描述评论。 – nitefrog 2011-04-04 21:44:45
你能提一下什么不适合你吗? – publicgk 2011-04-05 10:17:05