2012-04-01 50 views
0

我必須通過單擊按鈕來更新ListView 項目。如何在運行時查找並更新一個?在運行時訪問ListView以更新項目

更新:我的意思是我必須找到某個ListView項目並僅更新此項目的文本。

+0

取決於您是如何創建的項目。手動添加ListViewItems或綁定到某個項目集合? – Clemens 2012-04-01 10:36:10

+0

我手動添加了它們。 – 2012-04-01 10:56:27

回答

1

當ListViewItems手動添加到ListView,你可以看看他們,通過他們的內容,並與像這樣的新內容(使用System.Linq的)替代:

object contentToReplace = ...; 
object newContent = ...; 
ListViewItem item = listView.Items.Cast<ListViewItem>().FirstOrDefault(
    lvi => lvi.Content == contentToReplace); 
if (item != null) 
{ 
    item.Content = newContent; 
} 
+0

我的listView中有2列。如何將newListViewItem添加到指定的列? – 2012-04-01 15:50:53

+0

你應該發佈一些代碼和XAML。否則,很難猜測你在做什麼。 – Clemens 2012-04-01 16:28:08

0

您可以使用的命令。例如:

namespace WpfApplication1 
{ 
    public partial class MainWindow : Window 
    { 
     public static readonly ICommand ItemClickCommand = new RoutedCommand("ItemClick", typeof(MainWindow)); 

     public MainWindow() 
     { 
      InitializeComponent(); 

      this.CommandBindings.Add(
       new CommandBinding(
        MainWindow.ItemClickCommand, 
        this.ExecuteItemClickCommand, 
        this.CanExecuteItemClickCommand)); 
     } 

     private void CanExecuteItemClickCommand(object sender, CanExecuteRoutedEventArgs e) 
     { 
      e.CanExecute = e.Parameter is ListBoxItem; 
     } 

     private void ExecuteItemClickCommand(object sender, ExecutedRoutedEventArgs e) 
     { 
      // Here you can access ListBoxItem that holds a clicked button. 
      ListBoxItem listBoxItem = (ListBoxItem)e.Parameter; 
      listBoxItem.Content = "..."; 
     } 
    } 
} 

現在,唯一需要的是將ItemClickCommand分配給按鈕並將CommandParameter綁定到相應的ListBoxItem。

XAML例如:

<Window ... 
     xmlns:local="clr-namespace:WpfApplication1"> 
    <ListBox> 
     <ListBoxItem> 
      <ListBoxItem.Content> 
       <Button Command="{x:Static local:MainWindow.ItemClickCommand}" 
         CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}}" 
         Content="Click Me"/> 
      </ListBoxItem.Content> 
    <...>