我有一個使用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。
預先感謝您。
真棒,移動了datagrid.resources裏面的樣式,一切都按照我想要的那樣工作。非常感謝! – 2013-04-28 19:59:15
Stipo,當我在組合框中選擇綁定到對象屬性tracking_action.chrCode的不同vlaue時,datatemplate不會更改,如上所示。你知道爲什麼嗎? – 2013-04-28 21:23:02
我不確定它爲什麼不起作用,您應該嘗試調試它。嘗試從這裏的建議http://stackoverflow.com/questions/337023/how-to-detect-broken-wpf-data-binding – Stipo 2013-04-30 23:05:42