2013-04-28 2 views
2

У меня есть приложение wpf с использованием принципов MVVM. Внутри этого приложения у меня есть datagrid, где я хочу, чтобы каждая строка выбирала один из 6 возможных наборов данных, основанный на значении базового свойства объекта, связанного со строкой datagrid.изменить таблицу данных для строк datagrid на основе значения строки

ЦЕЛЬ: Я не хочу использовать код позади и хочу избежать использования набора данных. Я хотел бы использовать datatrigger для выбора из разных шаблонов данных для DetailsTemplate каждой строки.

ПОПЫТКА: Я попытался определить DataTrigger внутри DataGrid следующим образом, но это не работает.

  <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'.

Эта ошибка исчезает, если я удалить стиль тега/контент из определения DataGrid выше.

Может кто-то, пожалуйста, помогите мне определить таблицу данных строки, основанную на значении свойства внутри этой строки.

Заранее спасибо.

ответ

1

Вы должны положить стиль в <DataGrid.Resources> под <DataGrid>, а не под <DataGrid>.

+0

удивительный, перемещенный стиль внутри datagrid.resources и все работает точно так, как я хочу. Большое спасибо! –

+0

Stipo, Datatemplate не изменяется, когда я выбираю другое значение в поле со списком, которое привязывается к объекту property_action.chrCode, как показано выше. Ты знаешь почему? –

+0

Я не уверен, почему он не работает, вы должны попытаться его отладить. Попробуйте с предложениями здесь http://stackoverflow.com/questions/337023/how-to-detect-broken-wpf-data-binding – Stipo

Смежные вопросы