我有一个WPF列表框,其中包含一个名为JUC的用户控件。
这很好用,因为我对WPF还是很陌生,这已经给人留下了深刻的印象。我现在想做的是基于绑定(bind)属性在列表中具有不同的用户控件。
这可能吗?如果没有,我应该如何实现呢?
我之所以使用列表,是因为我想允许用户控件的拖放顺序,并且会有一个可变数字,因此似乎很有意义-欢迎使用其他方法。
<ListBox x:Name="peopleListBox"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemContainerStyle="{StaticResource ListBoxItemStretch}"
Foreground="Transparent"
BorderBrush="Transparent"
Background="Transparent"
Grid.ColumnSpan="2" SelectionChanged="peopleListBox_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<my:JUC Margin="4"></my:JUC>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
最佳答案
您可以使用DataTemplateSelector,在SelectTemplate()方法中,您可以检查当前传入的item使用哪个DataTemplate:
在XAML中:
<!-- define templates in resources
ChartDataTemplate is a ChartDataTemplate.xaml, the same for other
-->
<UserControl.Resources>
<DataTemplate x:Key="ChartDataTemplate">
<views:LineChartView />
</DataTemplate>
<DataTemplate x:Key="GridDataTemplate">
<views:PieChartView />
</DataTemplate>
</UserControl.Resources>
<!-- ListView Itemtemplate should point to template selector -->
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentPresenter
ContentTemplateSelector = "{StaticResource MyTemplateSelector}">
在后面的代码中:
private sealed class MyTemplateSelector: DataTemplateSelector
{
public override DataTemplate SelectTemplate(
object item,
DependencyObject container)
{
// 1. case item to your object which is bound to each ListView item
// 2. based on object type/state return correct DataTemplate
// as this.Resources["ChartDataTemplate"] or
// this.Resources["GridDataTemplate"]
}
}
关于.net - 不同类型的用户控件的WPF列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7877645/