2011-02-05 1 views
1

어떻게 될 수 있습니까?IBindingList 및 IBindingListView

List<T>IBindingList/IBindingListView을 구현하지 않으므로 UI ​​업데이트를 제공 할 수 없습니다. BindigList API에 맞게 몇 비트의 코드를 변경해야합니다.

+0

, BTW 나는 "약탈"쓴 경우, 그냥 목록이 dataGridViwe 무엇 이었습니까 연결하는 경우 내 아이팟은 지금 –

+0

추가 예제를 가지고 뜻? 그리고 업데이트 (삭제, 추가, ...) 후 목록, dataGridViwe 또한 업데이 트됩니다. 이 경우 –

답변

1

UI 알림은 일반적으로 이벤트를 통해 수행됩니다. 이 경우, IBindingList 및 이벤트를 의미합니다. IBindingListView와 같은 일부 사이드 인터페이스와 향상된 목록 추가 등을위한 몇 가지 다른 선택적 기능도 제공합니다. BindingList<T>은 필요한 모든 것을 지원하지만 결과적으로 약간의 간접비가 있습니다. 반대로 List<T>은 의도적으로 을 제공하지 않는다.을 제공한다. 그것은 일반 목적 (그리고 빠른) 동적 목록 장치이지 "관찰자"장치는 아닙니다.

또한 셀 단위 업데이트를 원할 경우 일반적으로 INOTifyPropertyChanged를 구현하려면 T 유형이 필요합니다. 이 기능이 없으면 행 수준 업데이트 (추가, 제거 등) 만 가능합니다. 예를 들어

:

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 

static class Program 
{ 
    class Foo 
    { 
     public int A { get; set; } 
     public string B { get; set; } 
    } 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     using (var form = new Form()) 
     using (var grid = new DataGridView { Dock = DockStyle.Fill }) 
     using (var add = new Button { Dock = DockStyle.Bottom, Text = "add" }) 
     using (var remove = new Button { Dock = DockStyle.Top, Text = "remove" }) 
     { 
      form.Controls.Add(grid); 
      form.Controls.Add(add); 
      form.Controls.Add(remove); 
      var lst = new BindingList<Foo>(); 
      var rnd = new Random(); 
      add.Click += delegate 
      { 
       lst.Add(new Foo { A = rnd.Next(1, 6), B = "new" }); 
      }; 
      remove.Click += delegate 
      { 
       int index = 0; 
       foreach (var row in lst) 
       { // just to illustrate removing a row by predicate 
        if (row.A == 2) { lst.RemoveAt(index); break; } 
        index++; 
       } 
      }; 
      grid.DataSource = lst; 
      Application.Run(form); 
     } 
    } 
} 
+0

잘 형편 맞춤법 자동 수정 –

+0

@ mah_85에서 bindinglist는 이벤트를 발생시켜 UI에 상황을 알리고 UI가 업데이트됩니다. 'List '는 그러한 이벤트를 노출시키지 않으므로 UI ​​**는 자동으로 업데이트 할 수 없습니다. –

+0

그럼 어떻게해야합니까? 코드를 설명하십시오. –

관련 문제