Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I'm thinking something like this should work right out of the box:</p> <pre><code>&lt;UserControl.Resources&gt; &lt;DataTemplate DataType="{x:Type vm:GenericQuestionViewModel}"&gt; &lt;v:GenericQuestion/&gt; &lt;/DataTemplate&gt; &lt;DataTemplate DataType="{x:Type tvm:GeographyQuestionViewModel}"&gt; &lt;tv:GeographyQuestion/&gt; &lt;/DataTemplate&gt; &lt;DataTemplate DataType="{x:Type tvm:BiologyQuestionViewModel}"&gt; &lt;tv:BiologyQuestion/&gt; &lt;/DataTemplate&gt; &lt;/UserControl.Resources&gt; &lt;ContentControl Content="{Binding QuestionViewModel}"&gt; </code></pre> <hr> <p><strong>Edit:</strong></p> <p>Yes, this definitely should work. Here's a more complete example:</p> <p><strong>Main View Model</strong></p> <pre><code>public class MainWindowViewModel : ViewModelBase { public ObservableCollection&lt;QuestionViewModel&gt; QuestionViewModels { get; set; } public MainWindowViewModel() { QuestionViewModels = new ObservableCollection&lt;QuestionViewModel&gt; { new GenericQuestionViewModel(), new GeographyQuestionViewModel(), new BiologyQuestionViewModel() }; } } </code></pre> <p><strong>Question View Models</strong></p> <pre><code>public abstract class QuestionViewModel : ViewModelBase { } public class GenericQuestionViewModel : QuestionViewModel { } public class GeographyQuestionViewModel : QuestionViewModel { } public class BiologyQuestionViewModel : QuestionViewModel { } </code></pre> <p><strong>Question User Controls</strong></p> <pre><code>&lt;UserControl x:Class="WpfApplication1.GenericQuestion" ...&gt; &lt;Grid&gt; &lt;TextBlock Text="Generic Question" /&gt; &lt;/Grid&gt; &lt;/UserControl&gt; &lt;UserControl x:Class="WpfApplication1.GeographyQuestion" ...&gt; &lt;Grid&gt; &lt;TextBlock Text="Geography Question" /&gt; &lt;/Grid&gt; &lt;/UserControl&gt; &lt;UserControl x:Class="WpfApplication1.BiologyQuestion" ...&gt; &lt;Grid&gt; &lt;TextBlock Text="Biology Question" /&gt; &lt;/Grid&gt; &lt;/UserControl&gt; </code></pre> <p><strong>Main Window</strong></p> <pre><code>&lt;Window x:Class="WpfApplication1.MainWindow" ... Title="MainWindow" Height="900" Width="525"&gt; &lt;Window.DataContext&gt; &lt;local:MainWindowViewModel /&gt; &lt;/Window.DataContext&gt; &lt;Window.Resources&gt; &lt;DataTemplate DataType="{x:Type local:GenericQuestionViewModel}"&gt; &lt;local:GenericQuestion /&gt; &lt;/DataTemplate&gt; &lt;DataTemplate DataType="{x:Type local:GeographyQuestionViewModel}"&gt; &lt;local:GeographyQuestion /&gt; &lt;/DataTemplate&gt; &lt;DataTemplate DataType="{x:Type local:BiologyQuestionViewModel}"&gt; &lt;local:BiologyQuestion /&gt; &lt;/DataTemplate&gt; &lt;/Window.Resources&gt; &lt;ItemsControl ItemsSource="{Binding QuestionViewModels}"&gt; &lt;ItemsControl.ItemTemplate&gt; &lt;DataTemplate&gt; &lt;ContentControl Content="{Binding}" /&gt; &lt;/DataTemplate&gt; &lt;/ItemsControl.ItemTemplate&gt; &lt;/ItemsControl&gt; &lt;/Window&gt; </code></pre> <p><strong>Update</strong></p> <p>Kyle Tolle pointed out a nice simplification for setting <code>ItemsControl.ItemTemplate</code>. Here is the resulting code:</p> <pre><code>&lt;ItemsControl ItemsSource="{Binding QuestionViewModels}" ItemTemplate="{Binding}" /&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload