這不是UserControl
,也不在那裏你定義的數據項將是什麼樣子,所以你可以很容易地在一個UserControl
顯示來自不同類別的項目GridView
。相反,你如何定義每個類應該通過聲明DataTemplate
s內呈現:
<DataTemplate DataType="{x:Type YourPrefix:foo}">
<StackPanel>
<TextBlock Grid.Row="0" Text="{Binding age}" />
<TextBlock Grid.Row="1" Text="{Binding name}" />
</StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type YourPrefix:bar}">
<StackPanel>
<TextBlock Grid.Row="0" Text="{Binding kind}" />
<TextBlock Grid.Row="1" Text="{Binding length}" />
</StackPanel>
</DataTemplate>
當然,你需要使用object
類型的集合,如果你希望能夠把不同類型的對象在它:
public ObservableCollection<object> Items { get; set; }
...
Items = GetFoos();
// Or Items = GetBars();
...
<ListBox ItemsSource="{Binding Items}" />
閱讀MSDN上的Data Templating Overview頁面可以幫助您更好地理解這一點。不過,我不會推薦這種方法,因爲您不斷需要將對象轉換回適當的類型。對於正在顯示或編輯的每種數據類型,您最好宣佈不同的UserControl
。