2012-04-01 49 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> 
    <...>