Have ItemsControl

  <Grid> <ItemsControl x:Name="control" VerticalAlignment="Center" HorizontalAlignment="Center" ItemsSource="{x:Bind ItemsSource, Mode=OneWay}" ItemTemplate="{x:Bind CellTemplate, Mode=OneWay, Converter={StaticResource SimpleSelector}}"> <!--Хочу сделать так--> <ContentControl VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ContentTemplate="{Binding SelectedCollageTemplate, Converter={StaticResource CollageTemplateSelector}}" /> <!--Как было--> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <controls:SimplePanel SelectedCollage="{Binding SelectedCollage, Mode=TwoWay}" SelectedCollagePattern="{Binding SelectedCollagePattern}"> <controls:SimplePanel.Background> <ImageBrush Stretch="Fill" ImageSource="ms-appx:///Images/Background/5.jpg" /> </controls:SimplePanel.Background> </controls:SimplePanel> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl> </Grid> 

The task is to select the desired panel depending on what the converter returns. If you just type in SimplePanel, everything works

When using a selector, do not even enter the constructor in the panel class.

Added selector:

  <templateSelector:CollageTemplateSelector x:Key="CollageTemplateSelector" SimpleTemplate="{StaticResource SimpleTemplate}" ShapeTemplate="{StaticResource ShapeTemplate}"/> 

And I moved my panel to the corresponding DataTemplate:

 <DataTemplate x:Key="SimpleTemplate"> <controls:SimplePanel SelectedCollage="{Binding SelectedCollage, Mode=TwoWay}" SelectedCollagePattern="{Binding SelectedCollagePattern}"> <controls:SimplePanel.Background> <ImageBrush Stretch="Fill" ImageSource="ms-appx:///Images/Background/5.jpg" /> </controls:SimplePanel.Background> </controls:SimplePanel> </DataTemplate> 

The converter returns SimplePanel as it should, but the controller itself does not start. What is the problem?

The selector itself:

  public class CollageTemplateSelector : IValueConverter { public DataTemplate SimpleTemplate { get; set; } public DataTemplate ShapeTemplate { get; set; } public DataTemplate CreativeTemplate { get; set; } public object Convert(object value, Type targetType, object parameter, string language) { var result = SimpleTemplate; var collage = value as Collage; if (collage != null) { switch (collage.Type) { case CollageTemplates.Simple: result = this.SimpleTemplate; break; case CollageTemplates.Shape: result = this.ShapeTemplate; break; case CollageTemplates.Creative: result = this.CreativeTemplate; break; } } return result; } public object ConvertBack(object value, Type targetType, object parameter, string culture) { throw new NotSupportedException(); } } 
  • And where did you add the selector? Show the code around. - VladD
  • And what does it mean does not start? - VladD
  • The selector added to the question - SmiLe
  • @VladD The breakpoint on the constructor does not work. Logic implemented in class does not work (not called) - SmiLe

1 answer 1

If I understand correctly, then you do not have a template selector at all, but a converter that you are trying to use instead.

The template selector is connected via:

 <ContentControl ContentTemplateSelector="{StaticResource=ContentControlTemplateSelector}"/> 

And it looks like this:

 public class ContentControlTemplateSelector : DataTemplateSelector { public DataTemplate NormalTemplate { get; set; } public DataTemplate WarningTemplate { get; set; } protected override DataTemplate SelectTemplateCore(object item) { var obj = item as Tender; if (obj != null) { ... return ...; } return ...; } } 

The converter is not needed.