У меня есть список, куда я хочу загрузить различные типы пользовательских элементов управления в приложении UWP.
Причина, по которой мне нужны UserControls, заключается в том, что для каждого элемента, который будет отображаться в списке, необходим код программной части, поэтому простой DataTemplate его не обрезает.
Я получаю сообщение об ошибке на линии
<converters:HomeWidgetControlPicker>
в списке.
The specified value cannot be assigned. The following type was expected: "DependencyObject".
Как я могу загрузить UserControl? Я использовал этот метод в старом приложении UWP, и там он работал, но в моем новом проекте это не так.
Я не могу использовать x:DataType как все элементы одного класса (HomeWidget), но в зависимости от свойства Type HomeWidget выбирается правильный 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;
}
}
и у меня есть Listbox, в настоящее время используется только тип (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>