2013-03-17 32 views
0

到現在爲止,我添加了項目的使用WPF添加ListViewItem的(不是類我做了)到ListView

lstView.Items.Add(new MyData("Val", 1)); 

的問題我的列表視圖是,我不能改變該項目的風格(如背景)簡單地與物品[我]。背景。

我試着讓MyData繼承ListViewItem,但綁定不起作用。

我的綁定:

<GridViewColumn Header="my var" DisplayMemberBinding="{Binding Path=Name}" /> 

正如我所說的東西線工程時,我添加的項目爲我自己的類,但不是在我的類繼承的ListViewItem。我也嘗試用我的類的DataContext添加listviewitem而沒有運氣。

任何人有任何想法如何解決這個問題?

回答

0

您可以使用數據綁定,併爲每個項目,將屬性(如BackColor)關聯到項目,將項目綁定到ObservableCollection中,如果要更改顏色,則簡單調用item.BackColor = ... ,這會做!

+0

可以說我在MyData類中有一個屬性backcolor。我在xaml中綁定了什麼?不能將它綁定到listviewitem,因爲ut還沒有存在 – user779444 2013-03-17 14:55:24

2

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中閱讀關於此主題的更多信息。

相關問題