我正在使用d:DesignInstance
在设计器中获取设计时数据。我的模型看起来像这样(简化):
interface IModel {
public ObservableCollection<IConversation> OpenConversations { get; }
}
enum ConversationType {
Channel, IM
}
interface IConversation {
public string Name { get; }
public ConversationType ConversationType { get; }
}
然后我有一个模拟模型,在OpenConversations
属性中有几个条目。这在我的ItemsSource
中用作ListView
时效果很好。我简化的XAML视图如下所示:
<Page d:DataContext="{d:DesignInstance Type=mocks:MockModel, IsDesignTimeCreatable=True}">
<ListView ItemsSource="{Binding OpenConversations}"/>
</Page>
上面的示例按预期工作,我得到了设计时数据。
但是现在我想使用ListView
在我的CollectionViewSource
中添加分组,所以我将以下内容添加到我的XAML中:
<Page.Resources>
<CollectionViewSource x:Name="OpenConversations" IsSourceGrouped="True" />
</Page.Resources>
并将ListView
更改为:
<ListView ItemSource="{StaticResource OpenConversations}" />
我无法弄清楚的是如何将设计数据输入到
CollectionViewSource
,我尝试了以下操作,但它不起作用:
<CollectionViewSource ... Source="{Binding OpenConversations}" />
根据https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh780627.aspx的文档,我需要(在代码隐藏中)分配CollectionViewSource.Source = from conversation in OpenConversations group by conversation.ConversationType into group select group
。但我无法弄清楚如何使用设计时数据来做到这一点。
答案 0 :(得分:0)
首先尝试定义群组的外观我是指群组的标题,还有更多
public class Group<T> : ObservableCollection<T>, INotifyPropertyChanged
{
public Group(string name,IEnumerable<T> items):base(items)
{ Name=name;
}
//more ...
}
此类不仅用于静态数据,还用于处理不断变化的数据。 现在,如果你使用MVVM模型在你的viewmodel(home)中定义一个属性ListGroup(你想要的名字)类型new ObservableCollection&gt; PS不是真正的代码只是模型给出一个ideea。
var s=var s = from val in OpenConversations group val by val.Conversationb into g select new Group<IConversation>(g.Key.ToString(), g);
GroupList = new ObservableCollection<Group<IConversation>>(s);
现在创建一个就像你在资源中的CollectionViewSource之前做的那样
<CollectionViewSource x:Key="cvs" IsSourceGrouped="True" Source="{Binding Source={StaticResource home},Path=GroupList}"/>
<ListView ItemsSource="{Binding Source={StaticResource cvs}}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Background="Salmon" Width="100" Height="100">
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.GroupStyle>
<GroupStyle >
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid Background="LightGray" >
<TextBlock Text='{Binding Name}' Foreground="Black" Margin="10"
Style="{StaticResource SubheaderTextBlockStyle}" />
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
了解如何在此处添加更多属性来定义GroupSyle 它最适合完全控制我在w10应用程序中使用它。 加上a有部分设计时间帮助(仅显示列表):))不显示组头(GroupView)