2009-03-20 36 views

Trả lời

1

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.

6

Đâ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.

4

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.

4

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!

2

(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.

Các vấn đề liên quan