문제

데이터베인딩 시나리오에서는 상당히 일반적인 문제라고 생각합니다. 배치 업데이트를 실행 중이며 PropertyChanged-Dependend 계산/작업/모든 단일 업데이트마다 실행되는 것을 피하려면 일반적으로 무엇을합니까?

일반적으로 내 마음에 오는 첫 번째는 새로운 부울을 소개하거나 이벤트 핸들러를 훅/훅을 소개하는 것입니다.

이 접근법에 대해 내가 좋아하지 않는 것은 다음과 같습니다.

  • 그들은 새로운 복잡성을 소개합니다 (유지해야합니다 ...)
  • 억압 된 알림이 나중에 전송되도록해야하기 때문에 오류가 발생합니다.

누군가 가이 문제를 이미 더 편리한 방식으로 처리하기가 더 편리한 방식 으로이 문제를 해결했는지 궁금합니다.

티아 마틴

편집 : 나를 잘못 이해하지 마십시오. .NET가 BindingList의 RaisElistChangeDevents와 같이 제공하는 것들에 대해 알고 있습니다. 모두 내가 설명한 것과 동일한 방식으로 문제를 다루고 있지만 단점을 나열 할 필요가없는 다른 방법을 찾고 있습니다. . 어쩌면 나는 잘못된 길을 가고 있을지 모르지만 여기서 시도해 보지만 ...

도움이 되었습니까?

해결책

불행히도 하나의 크기에 맞는 솔루션이 하나도 없습니다. 다음 솔루션을 적용하거나 보았습니다.

  1. 두 개의 노래가 있습니다. 하나의 신호는 사용자 조치에서 변경이 발생하면 다른 신호는 항상 발사됩니다. 이를 통해 UI의 변경 사항과 코드 별 업데이트를 구별 할 수 있습니다.

  2. 코드를 보호하는 부울

  3. 속성 이벤트 프레임 워크는 값이 실제로 변경되지 않은 경우 자동으로 전파 이벤트를 중지합니다.

  4. 신호 또는 신호 관리자의 동결/해동 메소드 (즉, 전체 프레임 워크)

  5. 신호를 하나의 신호로 병합하는 방법. 당신은 n 업데이트를 할 수 있고 m <= n의 m 신호로 수집됩니다. 동일한 속성을 100 번 변경하면 여전히 1 개의 신호 만 얻습니다.

  6. 신호 대기열 (동기 실행 대신). 그런 다음 대기열 코드도 신호를 병합 할 수 있습니다. "저장"버튼이없는 응용 프로그램에서 큰 성공을 거두었습니다. 모든 변경 사항은 데이터베이스를 작성할 때 데이터베이스에 저장됩니다. 텍스트를 변경하면 변경 사항이 특정 시간에 걸쳐 (즉, 이전 DB 업데이트가 반환 될 때까지) 병합 된 다음 단일 변경으로 커밋됩니다.

  7. 한 번에 여러 값을 설정하는 API; 단일 신호 만 방출됩니다.

  8. 신호 프레임 워크는 다른 수준의 세분성으로 신호를 보낼 수 있습니다. 이름이있는 사람이 있다고 가정 해 봅시다. 이름을 변경하면 이름 변경과 하나의 "인스턴스 필드 변경"이라는 두 가지 신호가 나타납니다. 따라서 "무언가가 변경되어있다"만 돌보면 모든 필드 대신 인스턴스에 연결할 수 있습니다.

다른 팁

어떤 플랫폼? 게시물은 내가 .NET를 생각하게 만듭니다.

기본 물체는 무엇입니까? 예를 들어, BindingList<T> 소스로서 설정하여 알림을 비활성화 할 수 있습니다. RaiseListChangedEvents 업데이트를 수행하는 동안 거짓으로.

그 외에 (또는 유사한); 예, 큰 업데이트 중에 바인딩을 분리하십시오

가장 쉬운 경로는 사용하는 것입니다 BindingSource 데이터 바인딩의 구성 요소. 컨트롤을 특정 물체 (또는 Ilist)에 바인딩하는 대신 해당 객체를 사용하십시오. DataSourceBindingSource, 그런 다음 컨트롤을 BindingSource.

그만큼 BindingSource 수업은 있습니다 SuspendBinding() 그리고 ResumeBinding() 기능.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top