2010-01-02 43 views
0

我想达到以下行为的内容: 取决于值使用不同的DataTemplate:动态改变控制的基础上的值

<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属性=“孩子”为空...

另一个信息是,这个DataTemplate中在控制的资源:(灰DevExpress的)

<dxg:GridControl  xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" 
x:Name="gridTitulaire"  DataSource="{Binding Contacts}" Width="600" > 
       <dxg:GridControl.Resources> 

        <DataTemplate x:Key="cardTemplate2"> 
        <Border x:Name="container"> 
        <StackPanel Orientation="Horizontal" > 

          </StackPanel> 
        </Border> 

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

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

       </dxg:GridControl.Resources> 
       <dxg:GridControl.Columns> 

        <dxg:GridColumn FieldName="first_name"/> 
        <dxg:GridColumn FieldName="last_name"/> 

       </dxg:GridControl.Columns> 
       <dxg:GridControl.View> 
        <dxg:CardView x:Name="view" ShowGroupedColumns="True" CardTemplate="{DynamicResource cardTemplate2}" /> 
       </dxg:GridControl.View> 
       </dxg:GridControl> 

的你的想法? 由于 乔纳森

回答

0

定义两个单独的数据模板(称它们CardTemplateV用于垂直之一,CardTemplateH用于水平之一,例如),和CardTemplateSelector设置为检查鉴别字段选择对象。

例子:

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

感谢,让我试试现在 – jweizman 2010-01-02 22:26:03

+0

好吧,这看起来是正确的方式。然而var dataObject = item作为YourDataType;线返回DevExpress.Wpf.Grid.CardData类型...不是我的对象... – jweizman 2010-01-02 22:43:19

+0

好吧,我会修改我的例子,或者你可以继续自己做,只需从它的DataContext属性中提取你的数据对象。 – 2010-01-02 22:45:04