【问题标题】:Add programmatically ListViewItem to Listview in WPF [duplicate]以编程方式将 ListViewItem 添加到 WPF 中的 Listview [重复]
【发布时间】:2010-10-14 11:51:41
【问题描述】:

可能重复:
WPF ListView - how to add items programmatically?

如何在 C# 中完成?

【问题讨论】:

    标签: c# wpf listview


    【解决方案1】:

    这就是您将在代码中创建的ListViewItem 添加到您的ListView 的方式:

    myListView.Items.Add(new ListViewItem { Content = "This is an item added programmatically." });
    

    但是,我同意 MrTelly 的观点,认为这不是必需的,您应该将 ListView.ItemsSource 设置为某个集合,而不是直接操作 ListView.Items。

    如果您向我们提供有关您想要完成的任务的更多详细信息,也许我们可以帮助您以 WPF 方式完成,这在开始时并不总是那么简单,但从长远来看它要容易得多运行。

    【讨论】:

      【解决方案2】:

      我问了完全相同的问题HERE(并回答了自己 - 我的代码有问题)。 希望能帮助到你。

      【讨论】:

        【解决方案3】:

        将其直接添加到应用程序中的 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】:

          (抱歉,还不能制作cmets)

          随着 MrTelly 的到来……

          将列表视图绑定到 ObservableCollection

          ObservableCollection<MyClassItem> lvList = new ObservableCollection<MyClassItem>();
          myListview.ItemSource = lvList;
          
          // Add an item
          lvList.Add(new MyClassItem("firstname", "lastname"));
          

          这样,当对集合进行更改时,它将自动更新 UI。

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

              您可以使用附加属性将列动态添加到 ListView。查看 CodeProject 上的这篇文章,它准确地解释了...

              WPF DynamicListView - Binding to a DataMatrix

              【讨论】:

                猜你喜欢
                • 2015-12-24
                • 1970-01-01
                • 2010-11-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-02-18
                • 2010-10-16
                相关资源
                最近更新 更多