사용자 인터페이스의 일부로 ListBox가있는 C# 프로젝트가 있습니다. 이 ListBox는 여러 프로젝트 이름을 표시하는 데 사용됩니다. 또한 데이터베이스 (모든 프로젝트, 불완전, 완료 등)에 대한 쿼리를 기반으로이 ListBox의 크기를 변경하는 옵션이 있습니다.변경 될 때마다 ListBox의 항목 수를 동적으로 어떻게 표시 할 수 있습니까?
또한 ListBox 내에있는 결과의 개수를 표시하는 레이블이 있습니다. 목록을 변경하는 코드 줄마다가 아닌 목록이 변경 될 때마다 자동으로이 작업을 수행 할 수있는 방법을 찾고자했습니다.
DataSourceChanged 이벤트를 사용해 보았지만 정말 흥미로운 문제입니다. ListBox가 실제로 새 값으로 채워지기 전에 이벤트가 발생합니다. 예를 들어, 프로그램 시작 부분에 ListBox의 데이터 소스를 100 개의 프로젝트 그룹으로 설정했습니다. 그런 다음 DataSourceChanged 이벤트가 발생하고 값을 얻으려면 listBox1.Items.Count.ToString()
호출하고 0을 반환합니다. 다시 목록 상자가 채워지기 때문에 다시. 따라서 레이블을 0으로 표시하고 목록 상자에 100 개 항목을 표시합니다.
이제 불완전한 프로젝트 (예 : 50이 계산 됨)로 범위를 좁히면 이벤트가 발생하면 100이라는 값이 반환됩니다. 이는 불완전 프로젝트가 존재하지 않기 때문입니다 데이터 소스가 변경된 이후 아직 채워지지 않았습니다. 그래서 저는 100이라고 쓰여지는 레이블을 갖지만 50 개의 항목 만있는 목록 상자를 갖습니다.
사용할 수있는 다른 이벤트가 있습니까? DataSourceChanged 이벤트에 보류중인 데이터 소스를 볼 수있는 매개 변수가 있습니까? 또는 실제로 코드에서 목록 상자를 변경하고 레이블을 업데이트하는 모든 인스턴스를 찾아야합니다.
사용'ObservableCollection에는'자동 업데이트 UI에 대한 알림을 제공 ItemsSource에 바인딩합니다. –
'DataSourceChanged'에서'listBox1.Items.Count.ToString()'을 실행하는 대신 목록에 항목을 추가하거나 DataSet을 Listbox에 바인딩하는 함수에 추가하려고 할 수 있습니다. – CularBytes
WPF는 이벤트와 관련이 없습니다. 당신은 완전히 잘못된 접근법을 사용하고 있습니다. WPF는 절차 적 코드가 아니라 XAML 및 DataBinding에 대한 것입니다. 단순히' '바인딩하면됩니다. 끔찍한 winforms와 같은 해킹이 필요 없습니다. –