2011-05-05 47 views
5

我有這樣的XAML:將項目添加到ListView時觸發事件?

<ListView Name="NameListView" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" 
      Grid.Column="1"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn> 
       <GridViewColumn.DisplayMemberBinding> 
        <MultiBinding StringFormat="{}{0} {1}"> 
         <Binding Path="First" /> 
         <Binding Path="Last" /> 
        </MultiBinding> 
       </GridViewColumn.DisplayMemberBinding> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

並稱爲ObservableCollection<Name>「名稱」綁定到我的代碼隱藏ListView控件。當一個新的新名稱添加到集合中時,我希望ListView更改新添加的名稱的背景顏色。我該如何去做呢?

+3

歡迎來到StackOverflow!我已經爲您解決了問題中的代碼格式。請花點時間閱讀「問題提示」區域右側的方便的**如何格式化**框和**中的[鏈接頁面](http://stackoverflow.com/editing-help) ?] **就在問題區域上方。 (還有一個預覽框顯示在提問框中,您可以在其中預覽您的問題。) – 2011-05-05 21:55:58

回答

15

您可以在您的listbox.Items屬性上訂閱ItemsChanged事件。這有點棘手,因爲你必須首先投射它。訂閱代碼應該是這樣的:

((INotifyCollectionChanged)MainListBox.Items).CollectionChanged += ListBox_CollectionChanged; 

然後這個事件裏面,你可以得到你的項目有這樣的代碼:

private void ListBox_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
    { 
     if (e.NewItems.Count > 0) 
     { 
      Dispatcher.BeginInvoke(() => 
      { 
       var newListItem = MainListBox.ItemContainerGenerator.ContainerFromItem(e.NewItems[0]) as Control; 
       if (newListItem != null) 
       { 
        newListItem.Background = System.Windows.Media.Brushes.Red; 
       } 
      }, DispatcherPriority.SystemIdle); 
     } 
    } 
+1

1.它不是一個ListBox,而是一個ListView 2.它是背景而不是前景3.我無法在任何地方看到這樣的事件控制。 – 2011-05-05 22:30:19

+0

修改了上面的代碼,使其更加清晰。此外,這應該與任何ItemsControl(列表框或ListView)。 – 2011-05-05 22:33:45

+1

我很確定這不會奏效。因爲ListItem是一個與ListBox或ListView無關的文檔控件,所以鑄造到ListItem的一件事永遠不會起作用。 – 2011-05-05 22:54:51

1

直接設置一個ListViewItem的背景不是一個好因爲默認情況下ListView是虛擬化的(這很好),這意味着組成這些項目的控件在滾動出視圖時會被丟棄。最簡單的方法是我可以考慮在你的數據對象中有一個指示New-state的屬性,然後你可以觸發它。

<ListView.ItemContainerStyle> 
    <Style TargetType="{x:Type ListViewItem}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsNew}" Value="True"> 
       <Setter Property="Background" Value="Yellow"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</ListView.ItemContainerStyle> 

然後,如果您不再認爲它是新的,那麼您可以使用任何您希望將該值設置爲false的邏輯。

相關問題