【发布时间】:2010-10-14 11:51:41
【问题描述】:
【问题讨论】:
【问题讨论】:
这就是您将在代码中创建的ListViewItem 添加到您的ListView 的方式:
myListView.Items.Add(new ListViewItem { Content = "This is an item added programmatically." });
但是,我同意 MrTelly 的观点,认为这不是必需的,您应该将 ListView.ItemsSource 设置为某个集合,而不是直接操作 ListView.Items。
如果您向我们提供有关您想要完成的任务的更多详细信息,也许我们可以帮助您以 WPF 方式完成,这在开始时并不总是那么简单,但从长远来看它要容易得多运行。
【讨论】:
我问了完全相同的问题HERE(并回答了自己 - 我的代码有问题)。 希望能帮助到你。
【讨论】:
将其直接添加到应用程序中的 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 容器的直接依赖 -- 一个非常有用的实践!
【讨论】:
(抱歉,还不能制作cmets)
随着 MrTelly 的到来……
将列表视图绑定到 ObservableCollection
ObservableCollection<MyClassItem> lvList = new ObservableCollection<MyClassItem>();
myListview.ItemSource = lvList;
// Add an item
lvList.Add(new MyClassItem("firstname", "lastname"));
这样,当对集合进行更改时,它将自动更新 UI。
【讨论】:
如果您按预期使用 ListView,它将绑定到某种对象的基础列表,并且该类应实现 INotifyChanged。在 WPF 中,您不直接从 ListView 添加/删除项目,而是处理绑定的列表结构,它会通知 UI 更改,然后巧妙地使用新项目重新绘制自己。
【讨论】:
您可以使用附加属性将列动态添加到 ListView。查看 CodeProject 上的这篇文章,它准确地解释了...
【讨论】: