在WPF中以编程方式向ListView添加ListViewItem

7
6个回答

6
这是将通过代码创建的ListViewItem添加到ListView中的方法:
myListView.Items.Add(new ListViewItem { Content = "This is an item added programmatically." });

然而,我同意MrTelly的观点:这并不是必要的,你应该将ListView.ItemsSource设置为某个集合,而不是直接操作ListView.Items

如果您提供更多关于您想要实现的细节,也许我们可以帮助您用WPF方式来完成它,这种方式起初可能并不容易,但从长远来看,它会变得更加容易。


4

直接将其添加到应用程序中的ListView并不一定是“WPF方式”。考虑以下内容:

public class BindableListViewModel 
{

     public IList<TypeOfObjectToDisplay> AllObjectsToDisplay;
     public ICommand AddNewItemToList;

     public BindableListViewModel()
     { 
       AllObjectsToDisplay = new ObservableList<TypeOfObjectToDisplay>();
       AddNewItemToList = new RelayCommand(AddNewItem(), CanAddNewItem());
     }

     public bool CanAddNewItem()
     {
       //logic that determines IF you are allowed to add
       //For now, i'll just say that we can alway add.
        return true;
     }

     public void AddNewItem()
     {
       AllObjectsToDisplay.Add(new TypeOfObjectToDisplay());
     }

}

那么,在XAML中,我们需要做的就是将ListView的ItemsSource绑定到我们的AllObjectsToDisplay列表。这使我们能够将添加对象的依赖性与直接添加到ListView分离; 我们可以使用WPF的数据绑定优势来消除我们如何将业务对象添加到我们显示它们的UI容器上的直接依赖 - 这是一种非常有用的实践!


4

我在这里问了同样的问题(并且自己回答了 - 我的代码有问题)。 希望能对你有所帮助。


2

把ListView绑定到ObservableCollection上

当MrTelly正在进行时...

将ListView绑定到ObservableCollection上。

ObservableCollection<MyClassItem> lvList = new ObservableCollection<MyClassItem>();
myListview.ItemSource = lvList;

// Add an item
lvList.Add(new MyClassItem("firstname", "lastname"));

这样,当对集合进行更改时,它将自动更新用户界面。


1

如果您按照预期使用ListView,它将绑定到某种对象的基础列表,并且该类应实现INotifyChanged。在WPF中,您不直接向ListView添加/删除项目,而是处理绑定的列表结构,它会通知UI发生更改,然后巧妙地使用新项目重新绘制自身。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接