thể trùng lặp:
WPF ListView - how to add items programmatically?Thêm trình ListViewItem để ListView trong WPF
Làm thế nào nó có thể được thực hiện trong C#?
thể trùng lặp:
WPF ListView - how to add items programmatically?Thêm trình ListViewItem để ListView trong WPF
Làm thế nào nó có thể được thực hiện trong C#?
Nếu bạn đang sử dụng ListView như dự định, nó sẽ bị ràng buộc vào danh sách cơ bản của một loại đối tượng nào đó và lớp đó sẽ triển khai INotifyChanged. Trong WPF bạn không trực tiếp thêm/xóa các mục khỏi ListView, bạn xử lý cấu trúc danh sách bị ràng buộc, và nó thông báo cho UI của sự thay đổi, sau đó khéo léo vẽ lại chính nó với các mục mới.
Đây là cách bạn sẽ thêm một ListViewItem
tạo trong mã để ListView
của bạn:
myListView.Items.Add(new ListViewItem { Content = "This is an item added programmatically." });
Tuy nhiên, tôi đồng ý với MrTelly rằng đây không phải là cần thiết, bạn nên thiết lập ListView.ItemsSource
một số bộ sưu tập thay vì thao tác trực tiếp ListView.Items
.
Nếu bạn cung cấp cho chúng tôi thêm chi tiết về những gì bạn muốn hoàn thành, chúng tôi có thể giúp bạn làm điều đó theo cách WPF, không phải lúc nào cũng dễ dàng, nhưng nó có thể dễ dàng hơn trong thời gian dài.
Bạn có thể thêm cột động vào ListView bằng cách sử dụng Thuộc tính được đính kèm. Xem bài viết này trên CodeProject nó giải thích chính xác điều đó ...
Tôi hỏi cùng một câu hỏi chính xác HERE (và trả lời bản thân mình - Tôi đã có một vấn đề trong mã của tôi). Hy vọng điều đó sẽ hữu ích.
Thêm trực tiếp vào ListView trong ứng dụng của bạn không nhất thiết là "WPF-way". Hãy xem xét điều này:
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());
}
}
Sau đó, trong XAML tất cả những gì chúng tôi cần làm là ràng buộc ItemsSource của ListView vào danh sách AllObjectsToDisplay của chúng tôi. Điều này cho phép chúng ta phân tách sự phụ thuộc của việc thêm các đối tượng trực tiếp vào ListView của chúng ta; chúng tôi có thể cho chúng tôi sức mạnh của WPF về Ràng buộc dữ liệu để xóa phụ thuộc trực tiếp về CÁCH chúng tôi thêm đối tượng doanh nghiệp vào vùng chứa giao diện người dùng của chúng tôi mà chúng tôi hiển thị chúng - một thực tiễn rất hữu ích!
(xin lỗi, không thể đưa ra bình luận nào)
Như MrTelly là vào ...
Bind listview để một ObservableCollection
ObservableCollection<MyClassItem> lvList = new ObservableCollection<MyClassItem>();
myListview.ItemSource = lvList;
// Add an item
lvList.Add(new MyClassItem("firstname", "lastname"));
Bằng cách đó nó sẽ tự động cập nhật Giao diện người dùng khi thay đổi được thực hiện cho bộ sưu tập.