Wpf 基于值动态更改控件的内容

Wpf 基于值动态更改控件的内容,wpf,binding,Wpf,Binding,我希望实现以下行为: 根据值,使用不同的数据模板: <DataTemplate x:Key="cardTemplate2"> <Border x:Name="container"> ..... </Border> <DataTemplate.Triggers>

我希望实现以下行为: 根据值,使用不同的数据模板:

 <DataTemplate x:Key="cardTemplate2">
                    <Border x:Name="container">
                     .....
                    </Border>

                  <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding ShowSecondDT}" Value="True">
                      <Setter Property="Child" TargetName="container">
                        <Setter.Value>
                            <StackPanel Orientation="Vertical" >

                            </StackPanel>
                        </Setter.Value>
                      </Setter>
                    </DataTrigger>
                  </DataTemplate.Triggers>
                </DataTemplate>

.....
应用程序无法声明Setter Property=“Child”为null

另一个信息是此数据模板位于控件的资源中:(devexpress gris)


有什么想法吗? 谢谢
Jonathan

定义两个独立的数据模板(例如,垂直的称为
CardTemplateV
,水平的称为
CardTemplateH
),并将CardTemplateSelector设置为检查判别字段的selector对象

例如:

class MyTemplateSelector : DataTemplateSelector
{
    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        var cardData = item as CardData;
        if (cardData == null) return null;
        var dataObject = cardData.DataContext as YourDataType;
        if (dataObject == null) return null;
        if (dataObject.isTitulairePrincipal)
            return (DataTemplate)App.Current.FindResource("CardTemplateV");
        else 
            return (DataTemplate)App.Current.FindResource("CardTemplateH");
    }
}
在XAML中,将选择器添加到资源字典并从网格中引用它:

<Window.Resources>
    <local:YourTemplateSelector x:Key="MyTemplateSelector"/>
</Window.Resources>
...
<dxg:CardView
    x:Name="view" 
    ShowGroupedColumns="True" 
    CardTemplateSelector="{StaticResource MyTemplateSelector}"/>
...

...
...

好的,看来这是正确的方法。但是,变量dataObject=item作为您的数据类型;行返回DevExpress.Wpf.Grid.CardData类型。。。不是我的对象…好吧,我会修改我的示例,或者你可以自己动手,只需从DataContext属性中提取你的dataobject。好吧,在完成一些其他工作(我必须手动从网格中检索值)后,它就可以工作了!您怎么知道devexpress网格有CarteTemplateSelector?不管怎样,你做到了。谢谢WPF中的一般做法是,无论你在哪里有
ItemTemplate
,你也有
ItemTemplateSelector
,所以我推断并搜索
CardTemplateSelector
,发现它存在。。。顺便说一下,我在上面的例子中写的
DataContext
方法不起作用?
<Window.Resources>
    <local:YourTemplateSelector x:Key="MyTemplateSelector"/>
</Window.Resources>
...
<dxg:CardView
    x:Name="view" 
    ShowGroupedColumns="True" 
    CardTemplateSelector="{StaticResource MyTemplateSelector}"/>
...