어떻게 될 수 있습니까?IBindingList 및 IBindingListView
List<T>
은 IBindingList
/IBindingListView
을 구현하지 않으므로 UI 업데이트를 제공 할 수 없습니다. BindigList API에 맞게 몇 비트의 코드를 변경해야합니다.
어떻게 될 수 있습니까?IBindingList 및 IBindingListView
List<T>
은 IBindingList
/IBindingListView
을 구현하지 않으므로 UI 업데이트를 제공 할 수 없습니다. BindigList API에 맞게 몇 비트의 코드를 변경해야합니다.
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);
}
}
}
잘 형편 맞춤법 자동 수정 –
@ mah_85에서 bindinglist는 이벤트를 발생시켜 UI에 상황을 알리고 UI가 업데이트됩니다. 'List
그럼 어떻게해야합니까? 코드를 설명하십시오. –
, BTW 나는 "약탈"쓴 경우, 그냥 목록이 dataGridViwe 무엇 이었습니까 연결하는 경우 내 아이팟은 지금 –
추가 예제를 가지고 뜻? 그리고 업데이트 (삭제, 추가, ...) 후 목록, dataGridViwe 또한 업데이 트됩니다. 이 경우 –