我有一个树视图并单击每个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表达式。
提前谢谢!
答案 0 :(得分:1)
如果您的触发器基于多个动态值,请使用MultiValueConverter
在这种情况下,您将使用绑定传递转换器的名称和运行时值,并返回类似于true / false值的内容
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource IsNameEqualValueConverter}">
<Binding Path="Name" />
<Binding Path="PathToRuntimeValue" />
</MultiBinding>
</DataTrigger.Binding>
</DataTrigger>