DataTrigger Value属性不能在设计时指定,有什么替代方法

时间:2012-06-21 15:34:56

标签: wpf treeview datatrigger

我有一个树视图并单击每个treenode,treenode的详细信息将显示在树视图的右侧。每个treenode都有自己的视图模型。下面的代码显示了我如何显示细节:

当Value =“可以在设计的时间指定”时(我有11个),一切都很好。但我有一个treenode有不同名称的孩子(见下面的代码值=“不能在设计时指定”),因为它们是动态地从数据库中的一个表的两列检索,并列出其中4000或更多不现实。

Name =“J”+ tablename.Label +“。” + tablename.SubLabel;

<ContentControl Name="DetailContentControl" 
Content="{Binding ElementName=myTreeview, Path=SelectedItem, Mode=OneWay}">
   <ContentControl.ContentTemplate>
<DataTemplate>
    <ContentControl Name="CC" Content="{Binding }" />
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=Name}" Value="DXHeader">
          <Setter TargetName="CC" Property="ContentTemplate" Value="{StaticResource  DXHeaderDetailsTemplate }"/>
      </DataTrigger>
        <DataTrigger Binding="{Binding Path=Name}"  Value="Don't know at designed time">
    <Setter TargetName="CC" Property="ContentTemplate" Value="{StaticResource MyDetailsTemplate }"/>
        </DataTrigger>                      
     .....
       </DataTemplate.Triggers>
</DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>

如果我可以这样做,就没有问题:

但是,DataTrigger.Value属性不支持Binding表达式。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

如果您的触发器基于多个动态值,请使用MultiValueConverter

在这种情况下,您将使用绑定传递转换器的名称和运行时值,并返回类似于true / false值的内容

<DataTrigger Value="True">
    <DataTrigger.Binding>
        <MultiBinding Converter="{StaticResource IsNameEqualValueConverter}">
            <Binding Path="Name" />
            <Binding Path="PathToRuntimeValue" />
        </MultiBinding>
    </DataTrigger.Binding>
</DataTrigger>