ListBox의 SelectedItem 데이터를 속성에 바인딩하려고합니다. 다음 코드는 예입니다.BindingNavigator가있는 상태에서 ListBox의 SelectedItem 바인딩
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace BindingFailure
{
static class Program
{
class OuterObject
{
public string selected { get; set; }
public List<string> strings { get; set; }
}
public static void Main()
{
List<OuterObject> objs = new List<OuterObject>()
{
new OuterObject(), new OuterObject()
};
objs[0].strings = new List<string> { "one", "two", "three" };
objs[1].strings = new List<string> { "four", "five", "six" };
Form form = new Form();
BindingSource obs = new BindingSource(objs, null),
ibs = new BindingSource(obs, "strings");
BindingNavigator nav = new BindingNavigator(obs);
ListBox lbox = new ListBox();
lbox.DataSource = ibs;
lbox.DataBindings.Add(new Binding("SelectedItem", obs, "selected"));
form.Controls.Add(nav);
form.Controls.Add(lbox);
lbox.Location = new System.Drawing.Point(30, 30);
Application.Run(form);
}
}
}
항목을 선택하면 앞으로 이동하고 항목을 선택한 다음 끝내면 예상대로 작동합니다. 그러나 네비게이터를 사용하여 두 외부 물체간에 앞뒤로 전환하면 선택한 항목이 잘못된 값으로 덮어 쓰여있는 것처럼 보입니다. BindingNavigator가 요소로 이동할 때마다 ListBox는 컬렉션의 첫 번째 항목으로 이동해야하므로 SelectedItem에 바인딩 된 변수에 있던 모든 값을 덮어 쓰는 것으로 나타납니다.
이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 미리 감사드립니다.
편집 : 다음은 디버그 이진을 포함하여 예제 프로젝트의 아카이브입니다.
http://www.mediafire.com/?dzmqmz0mynj
편집 : 여기 허용 대답에 따라 도우미 기능은 다음과 같습니다
public static void Bind(ListControl list, BindingSource outersource, string dataMember)
{
Binding bindSel = new Binding("SelectedItem", outersource, dataMember);
list.DataBindings.Add(bindSel);
outersource.CurrentChanged += delegate
{
list.BeginInvoke(new MethodInvoker(bindSel.ReadValue));
};
}
나는 그것을 재현 할 수 없다. 그것은 목록 상자와 탐색기 (새로운 단추 및 제거 단추 제외)로 무엇을하려고 하든지 관계없이 잘 작동합니다. – Yegor
아마 사용중인 .NET 버전일까요? 3.5를 사용 중입니다 ... – Reinderien
제공 한 코드로 문제를 복제 할 수 없습니다. 닷넷 3.5와 C#. 새로 만들기 및 제거 버튼이 작동하지 않지만, 탐색 버튼의 콤보를 사용하여 목록이 잘 채워진 것처럼 보입니다. 오류를 재현하는 데 도움이되는 추가 단계를 나열하거나 어딘가에 파일 저장소에 프로젝트를 업로드 할 수 있습니까? – Caladain