我有一个Listbox,我想在UWP应用程序中加载不同类型的UserControls。
我需要UserControls的原因是,对于列表中显示的每一项都需要代码隐藏,所以一个简单的DataTemplate就不会删除它。
我在线路上出了个错误
<converters:HomeWidgetControlPicker>在列表箱里。
The specified value cannot be assigned. The following type was expected: "DependencyObject".如何加载UserControl?我在一个较老的UWP应用程序中使用了这种方法,它在那里起了作用,但在我的新项目中却没有。
我不能使用x:DataType作为属于同一个类( HomeWidget )的所有项,但取决于HomeWidget的Type,选择了正确的UserControl。
我做了一个DataTemplateSelector:
public class HomeWidgetControlPicker : DataTemplateSelector
{
public DataTemplate Artist { get; set; }
public DataTemplate Release { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
if (item != null)
{
var result = (HomeWidget)item;
if (result.Type == "artist")
{
return Artist;
}
if (result.Type == "release")
{
return Release;
}
}
return null;
}
}我有一个列表框,目前只使用类型(HomeWidgetControlPicker.Artist),但是后面会有更多。
<ListBox x:Name="wrapGrid" ItemContainerStyle="{StaticResource WrapPanelBorderedItem}" ItemsSource="{x:Bind WidgetList}" Background="{x:Null}" ScrollViewer.VerticalScrollBarVisibility="Disabled" VerticalAlignment="Top" HorizontalAlignment="Center" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<userControls:WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<converters:HomeWidgetControlPicker>
<converters:HomeWidgetControlPicker.Artist>
<DataTemplate>
<homeItems:HomeArtist></homeItems:HomeArtist>
</DataTemplate>
</converters:HomeWidgetControlPicker.Artist>
</converters:HomeWidgetControlPicker>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>发布于 2018-04-23 03:24:39
您使用DataTemplateSelector的方式应该是错误的。在您的代码片段中,DataTemplateSelector被放置为DataTemplate的根元素,但实际上,您可以使用DataTemplateSelector并设置属性(如ItemTemplateSelector )将其分配给数据视图。有关详细信息,请参阅备注部分 of DataTemplateSelector类。
在XAML中,基类DataTemplateSelector不用作对象元素。但是,一个常见的场景是派生自定义DataTemplateSelector,映射自定义类及其命名空间/程序集的xmlns前缀,然后引用XAML中的参考资料块中定义的自定义类实例。这样就可以通过x:Key引用自定义模板选择器类,并使用该引用在XAML模板和可视化状态中设置属性值,如ItemTemplateSelector。
例如:
<Page.Resources>
<DataTemplate x:Key="Artist" x:DataType="local:HomeWidget">
<Grid>
<local:UserControl1></local:UserControl1>
...
</Grid>
</DataTemplate>
<DataTemplate x:Key="Release" x:DataType="local:HomeWidget">
<Grid>
<local:UserControl2></local:UserControl2>
...
</Grid>
</DataTemplate>
<local:HomeWidgetControlPicker x:Key="HomeWidgetControlPicker" Artist="{StaticResource Artist}" Release="{StaticResource Release}">
</local:HomeWidgetControlPicker>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListBox x:Name="wrapGrid" ItemTemplateSelector="{StaticResource HomeWidgetControlPicker}" ItemsSource="{x:Bind WidgetList}"
...
</ListBox>
</Grid>https://stackoverflow.com/questions/49957939
复制相似问题