2010-01-02 44 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