WPF具有Data Templating的概念將可視化與底層數據分開。 ListView(與任何其他ItemsControl一樣)通過ItemTemplate
屬性爲其項目提供數據模板。你可以在Styling and Templating an ItemsControl中閱讀。
鑑於這種簡單的DataItem類
public class DataItem
{
public string ItemText { get; set; }
public Brush ItemBackground { get; set; }
}
該類一個非常簡單的DataTemplate可能只包含一個邊框和TextBlock控件:
<ListView Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<Border Background="{Binding ItemBackground}">
<TextBlock Margin="4" Text="{Binding ItemText}"/>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
與一個GridView一個ListView,你會指定GridViewColumn的CellTemplate
而不是ItemTemplate
:
<ListView Name="listView">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Border Background="{Binding ItemBackground}">
<TextBlock Margin="4" Text="{Binding ItemText}"/>
</Border>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
現在,你可以簡單地添加DataItems到ListView這樣的:
listView.Items.Add(new DataItem { ItemText = "Item 1", ItemBackground = Brushes.AliceBlue });
listView.Items.Add(new DataItem { ItemText = "Item 2", ItemBackground = Brushes.LemonChiffon });
listView.Items.Add(new DataItem { ItemText = "Item 3", ItemBackground = Brushes.LightCoral });
爲了使UI上的DataItem對象的變化作出反應,在DataItem的類必須實現INotifyPropertyChanged。
public class DataItem : INotifyPropertyChanged
{
...
}
獲取數據的更好的分離和UI,你不會直接將項目添加到Items
收集的ListView的,而是綁定ItemsSource
屬性ObservableCollection<DataItem>
類型的屬性:
<ListView ItemsSource="{Binding DataItems}">
...
</ListView>
您可以在Data Binding Overview/Binding to Collections中閱讀關於此主題的更多信息。
可以說我在MyData類中有一個屬性backcolor。我在xaml中綁定了什麼?不能將它綁定到listviewitem,因爲ut還沒有存在 – user779444 2013-03-17 14:55:24