我想为容器的项目计数使用不同的面板。我有办法实现这个目标吗?
例如,我想将PanelA
用于少于5件商品,PanelB
以获取更多商品。
我为此目的实现了DataTemplateSelector
类,它似乎有效。但是当谈到绘制UI元素时,我得不到任何结果,只有空白的白色屏幕。
public class PanelDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
MyViewModel VM = (VisualTreeHelper.GetParent(container) as ContentControl).DataContext as MyViewModel;
DataTemplate template = null;
if (VM.ItemsList.Count < 5)
template = element.FindResource("PanelA") as DataTemplate;
else
template = element.FindResource("PanelB") as DataTemplate;
return template;
}
}
以下是我的XAML代码中的一个模板。第二个是相同但PanelB
。
<DataTemplate x:Key="PanelA">
<ListBox x:Name="ItemsListBox" ItemsSource="{Binding Path=ItemsList}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Source="{Binding Path=Image}"/>
<TextBlock Text="{Binding Path=Label}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<mynamespace:PanelA />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</DataTemplate>
<DataTemplate x:Key="PanelB">
...
</DataTemplate>
资源之后,我有以下ContentControl部分。
<Grid>
<ContentControl>
<ContentControl.ContentTemplateSelector>
<local:PanelDataTemplateSelector />
</ContentControl.ContentTemplateSelector>
</ContentControl>
</Grid>
由于