백그라운드 처리가 xtratreelist 노드를 업데이트 할 때 편집자가 닫히는 것을 방지하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1800420

문제

나는 사용하고있다 DeVexpress Xtra 트리리스트 제어 계층 적 질문과 응답 세트를 표시하려면 섹션, 하위 섹션 및 다양한 질문이 포함 된 복잡한 설문 조사 양식을 생각하십시오.

양식은 데이터 세트 나 데이터베이닝이 없으면 결합되지 않은 모드에서 작동합니다.

각 질문에 대해 표시된 정보의 일부로 배경 스레드에서 웹 서비스를 호출하여 일부 배경을 얻습니다. 이 웹 서비스 호출의 결과는 전화를 통해 트리리스트를 채우는 데 사용됩니다. TreeListNode.SetValue().

현재,이 전화 SetValue() 활성 편집기가 닫히고 사용자의 현재 입력을 버리고 있습니다. 해로운 경험.

이러한 배경 업데이트의 사용자의 편집 프로세스가 영향을받지 않도록하려면 어떻게해야합니까?

내가 찾은 유일한 질문은 DeVexpress 포럼에 관한 것이 었습니다. 여기서 제안은 사용자의 항목에 대한 강제 커밋이며, 이는 데이터 손실을 피하지만 그렇지 않으면 사용자 경험이 좋지 않은 경우에는 아무것도하지 않습니다. 이 모든 것이 2007 년부터 시작된 이래로 상황이 바뀌기를 바라고 있습니다. 사용자의 활동 상태를 변경하지 않고 노드를 업데이트 할 수 있습니까?

배경 : 일반적인 화면에는 500 개 이상의 행이 있으며 웹 서비스는 각 행에 대해 약 0.6 초가 걸립니다. 0.6 초마다 사용자의 조치를 강제로 커밋하거나 취소하는 것은 단순히 허용되지 않으며, 사용자는 변경을 완료하기 전에 (> 5 분)를 기다리도록 강요합니다.

도움이 되었습니까?

해결책

짧은 대답 : 당신은 할 수 없습니다

트리리스트에서 값을 변경하면 현재 사용자 편집이 취소되어 바인딩 사용 여부가 없습니다.

DeVexpress의 공식 응답 :

불행히도 데이터 소스 값이 변경 될 때 활성 편집기가 닫히는 것을 방지 할 방법이 없습니다. 트리리스트는 항상 기본 데이터와 동기화되어야하기 때문에 달성하는 것은 불가능합니다. 이 기능은 IbindingList 인터페이스를 통해 일반적인 방식으로 구현됩니다. "변경"알림에 응답하여 트리리스트는 자체적으로 새로 고침해야하며 결과적으로 데이터를 다시로드해야합니다. 이로 인해 활성 편집 상태가 재설정됩니다.

그러나 필요한 기능을 도입하는 몇 가지 방법이 있습니다. 예를 들어, 특정 객체를 직접 편집 할 수있는 편집기 세트가 포함 된 별도의 양식을 만들 수 있습니다. 이 목표를 달성하는 또 다른 가능한 방법은 모든 변경 사항을 캐시 할 수있는 중간 저장소를 만드는 것입니다. 트리리스트의 데이터 소스와 동기화는 사용자 요청에 의해 수행되어야합니다.

다른 팁

내가 그것을 달성하기 위해 달성 한 한 가지 방법은 업데이트 (100 밀리 초) 이벤트 후 작은 시간 지연 후 showitor ()에 의해 의다. NotifyPropertyChanged 업데이트로 인해 문제가 생길 것입니다. 집중화 된 상태에 연결됩니다. 예를 들어:

FocusedNodeChanged += OnNodeChanged;
private void OnNodeChanged(object s, FocusedNodeChangedEventArgs e)
    {
        _delayer.Start();
    }
private void _delayer_Tick(object sender, EventArgs e)
    {
        ShowEditor();
        _delayer.Stop();
    }

_delayer는 진드기 이벤트가있는 타이머 클래스입니다. 약간 조잡하지만 트릭을 수행합니다.

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