Tôi có ObservableCollection chứa các kiểu xem nhiều loại, và tôi muốn tạo một DataTemplate cho mỗi kiểu trong mỗi CellTemplates của GridViewColumn của tôi. Trong ví dụ đơn giản này, tôi có thể tạo một ViewModel cơ sở, nhưng tôi muốn có thể thực hiện điều này chỉ từ xaml. Các xaml dưới đây cho thấy những gì tôi đang cố gắng để làm, nơi mà một trong những DataTemplates sẽ được sử dụng cho mỗi CellTemplate.DataTemplate cho mỗi DataType trong GridViewColumn CellTemplate
Nếu có một GridViewColumn.Resources tôi sẽ định nghĩa DataTemplates ở đó, sau đó sử dụng một DataTemplate với ContentPresenter trong CellTemplate, nhưng tôi rõ ràng không thể làm điều đó. Tôi nghĩ rằng tôi có thể cần một TemplateSelector, nhưng tôi không chắc chắn nơi để bắt đầu.
<ListView ItemsSource={Binding GenericObservableCollection>
<ListView.View>
<GridView>
<GridViewColumn Header="Type">
<GridViewColumn.CellTemplate>
<DataTemplate DataType="{x:Type vm:ActionInputViewModel}">
<TextBlock Text="Input"/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ActionOutputViewModel}">
<TextBlock Text="Output"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Value">
<GridViewColumn.CellTemplate>
<DataTemplate DataType="{x:Type vm:ActionInputViewModel}">
<TextBlock Text="{Binding Property1}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ActionOutputViewModel}">
<TextBlock Text="{Binding Property2}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Hoàn hảo. Cảm ơn bạn đã cung cấp câu trả lời chi tiết cho cả hai cách tiếp cận mà tôi đã xem xét. – scuba88
Geez, tôi đã sooo gần sau khi flailing giờ, nhưng bạn đóng đinh nó. Lỗi của tôi là tôi đã ràng buộc 'DataContext' của' ContentControl', trái với 'Nội dung' như bạn đã chỉ ra một cách chính xác. Kudo và cảm ơn. –
Tôi thích nó khi mọi người thực sự dành thời gian cho câu trả lời của họ. Hiển nhiên trong chi tiết bạn đã cung cấp. Công việc tốt. +1. – cplotts