【发布时间】:2012-07-27 20:06:59
【问题描述】:
当前设置
我有一个自定义类,代表一个安装程序文件和该文件的一些属性,符合以下接口
public interface IInstallerObject
{
string FileName { get; set; }
string FileExtension { get; set; }
string Path { get; set; }
int Build { get; set; }
ProductType ProductType { get; set; }
Architecture ArchType { get; set; }
bool Configurable { get; set; }
int AverageInstallTime { get; set; }
bool IsSelected { get; set; }
}
我的ViewModel 有一个名为ReadOnlyObservableCollection<IInstallerObject> 的属性AvailableInstallerObjects。
我的View 有一个GroupBox,其中包含绑定到上述属性的ItemsControl。
<GroupBox Header="Products">
<ItemsControl ItemsSource="{Binding Path=AvailableInstallerObjects}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding Path=IsSelected}"
VerticalAlignment="Center" Margin="5"/>
<TextBlock Text="{Binding Path=FileName}" Margin="5" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</GroupBox>
绑定可以正常工作,只是它对用户不友好。显示了 100 多个项目。
这里需要帮助
我希望能够使用我的IInstallerObjects 集合,但让View 向它们呈现以下ItemTemplate 结构。
<GroupBox Header="Products">
<ItemsControl ItemsSource="{Binding Path=AvailableInstallerObjects}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding Path=IsSelected}"
VerticalAlignment="Center" Margin="5"/>
<TextBlock Text="{Binding Path=ProductType}" Margin="5" />
<ComboBox ItemsSource="{Binding Path=Build}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</GroupBox>
基本上,我希望能够按ProductType 属性进行分组,显示可用产品的列表,其中ComboBox 代表IInstallerObjects 的ProductType 的可用Build 属性值。
我可以在ViewModel 中使用LINQ 来提取分组,但我不知道如何绑定到我提取的内容。
我的研究还发现了使用CollectionViewSource 的可能性,但我不确定如何将其应用于我当前的设置。
提前感谢您的帮助。我愿意学习,所以如果我忽略了一些明显的事情,请引导我查看相关信息,我很乐意自学。
【问题讨论】:
标签: c# wpf data-binding grouping itemscontrol