У меня есть приложение 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 выше.
Может кто-то, пожалуйста, помогите мне определить таблицу данных строки, основанную на значении свойства внутри этой строки.
Заранее спасибо.
удивительный, перемещенный стиль внутри datagrid.resources и все работает точно так, как я хочу. Большое спасибо! –
Stipo, Datatemplate не изменяется, когда я выбираю другое значение в поле со списком, которое привязывается к объекту property_action.chrCode, как показано выше. Ты знаешь почему? –
Я не уверен, почему он не работает, вы должны попытаться его отладить. Попробуйте с предложениями здесь http://stackoverflow.com/questions/337023/how-to-detect-broken-wpf-data-binding – Stipo