2013-04-28 51 views
2

我有一個使用MVVM原則的wpf應用程序。在這個應用程序中,我有一個datagrid,我希望每行都根據綁定到datagrid行的對象中基礎屬性的值,在6個可能的數據模板之一中進行選擇。根據行值更改數據網格的rowdetails的數據模板

目標: 我不想使用後面的代碼,並希望避免使用datatemplateselector。我想用datatrigger從不同的數據模板中爲每行的DetailsTemplate選擇。

ATTEMPTED: 我試圖在DataGrid中定義一個datatrigger,如下所示,但它不起作用。

  <DataGrid Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" MinHeight="300"   
        ItemsSource="{Binding TrackingCollection}" 
        CanUserAddRows="False" CanUserDeleteRows="False" 
        SelectionMode="Single" SelectedItem="{Binding SelectedTracking, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
       <Style TargetType="{x:Type DataGridRow}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="RC"> 
          <!-- RECIEVING --> 
          <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingReceivingDetailTemplate}" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="SH"> 
          <!-- SHIPPING --> 
          <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingShippingDetailTemplate}" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="ST"> 
          <!-- STOCKING --> 
          <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingStockingDetailTemplate}" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="OR"> 
          <!-- ORDERING --> 
          <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingOrderingDetailTemplate}" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="RT"> 
          <!-- RETURNING --> 
          <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingReturningDetailTemplate}" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="TR"> 
          <!-- TRANSFERING --> 
          <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingTransferingDetailTemplate}" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
       <DataGrid.Columns> 
        ''column definitions go here 
       </DataGrid.Columns> 
      </DataGrid> 

錯誤: 當我運行應用程序,我得到以下錯誤:

'Add value to collection of type 'System.Windows.Controls.ItemCollection' threw an exception.' Line number '137' and line position '35'.

這個錯誤消失,如果我刪除從上面的數據網格定義的風格標籤/內容。

有人可以幫助我根據該行內屬性的值定義行的datatemplate。

預先感謝您。

回答

1

您應該將樣式放入<DataGrid.Resources><DataGrid>,而不是直接在<DataGrid>下。

+0

真棒,移動了datagrid.resources裏面的樣式,一切都按照我想要的那樣工作。非常感謝! – 2013-04-28 19:59:15

+0

Stipo,當我在組合框中選擇綁定到對象屬性tracking_action.chrCode的不同vlaue時,datatemplate不會更改,如上所示。你知道爲什麼嗎? – 2013-04-28 21:23:02

+0

我不確定它爲什麼不起作用,您應該嘗試調試它。嘗試從這裏的建議http://stackoverflow.com/questions/337023/how-to-detect-broken-wpf-data-binding – Stipo 2013-04-30 23:05:42

相關問題