How to use DataTemplateSelector with ContentControl to display different controls based on the view-model?

后端 未结 2 997
无人及你
无人及你 2021-01-17 04:52

I want to create a simple window that would display different controls (SpinEdit or TextEdit) based on the view-model that is selected.

I h

相关标签:
2条回答
  • 2021-01-17 05:07

    You have to add some value in the Content property of the ContentControl. That value will be passed to the SelectTemplate as the object item. You probably should bind to it some property in your ViewModel to be able to change that from there.

    0 讨论(0)
  • 2021-01-17 05:10

    You do not need a DataTemplateSelector. WPF provides a mechanism that automatically selects a DataTemplate for the ContentTemplate of a ContentControl according to the type of a Content.

    As explained in Data​Template.​Data​Type:

    When you set this property to the data type without specifying an x:Key, the DataTemplate gets applied automatically to data objects of that type.

    So drop the x:Key value and your DataTemplateSelector, set DataType

    <dx:DXWindow.Resources>
        <DataTemplate DataType="{x:Type local:TInputValueVM}">
            <dxe:SpinEdit Height="23" MinWidth="200" Width="Auto"
                          Text="{Binding Path=Value, Mode=TwoWay}"
                          Mask="{Binding Mask, Mode=OneWay}" 
                          MaxLength="{Binding Path=InputLength}" />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:TInputTextVM}">
            <dxe:TextEdit Height="23" MinWidth="200" Width="Auto"
                          Text="{Binding Path=Value, Mode=TwoWay}"
                          MaskType="RegEx" Mask="{Binding Mask, Mode=OneWay}"
                          MaxLength="{Binding Path=InputLength}"/>
        </DataTemplate>
    </dx:DXWindow.Resources>
    

    and bind the ContentControl's Content to a property that returns either a TInputValueVM or a TInputTextVM:

    <ContentControl Content="{Binding InputVM}" />
    

    The appropriate DataTemplate will now be selected automatically.

    0 讨论(0)
提交回复
热议问题