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}"/>
...