2014-09-08 7 views
0

내 응용 프로그램에서 사용자는 DataGrid에 행을 추가하고 각 행의 속성을 변경할 수 있습니다. 사용자는 행을 삭제할 수도 있습니다. 이 작업을 실행 취소하고 다시 실행하는 데는 문제가 없지만 사용자가 행을 추가하면 3을 말하고 일부 값을 수정 한 다음 한 행만있는 곳으로 되돌리고 새 행을 추가하면 실행 취소를 다시 할 수있는 것으로 비논리적입니다 마지막으로 추가 된 행 뒤에 새 행이 표시됨). 따라서 사용자가 새 행을 추가 할 때 모든 Redos를 삭제하려고합니다.메멘토에서 다시 실행을 제거 하시겠습니까?

RedoBatches를 사용하여 모든 리도 열거를 가져오고 각 리셋 열을 지우려고했으나 다시 실행 취소 버튼이 여전히 활성화되어 있으며 눌렀을 때 이러한 작업을 다시 실행합니다.

이것을 달성하기위한 적절한 방법입니까 아니면 불가능합니까 아니면 다르게해야합니까?

답변

0

개체를 사용하여 항목을 추가 할 때 UnregisterObject을 사용하여 등록을 취소 할 수 있습니다. 빈 배치도 자동으로 제거됩니다.

또 다른 해킹은 실행 취소/다시 실행 배치 속성을 목록 <에 캐스팅하고 적절하게 수정하는 것입니다 (그러나이 경우 내부를 "엉망으로 처리하는"것에 유의하십시오).

+0

등록을 취소해야하는 항목은 무엇입니까? 사용자는 행 1, 2 및 3을 추가 한 다음 행 3의 추가를 취소 한 다음 새 행을 추가합니다. 다시 실행하면 네 번째 행이 추가됩니다. 그러나 행을 보유하고있는 객체의 등록을 취소하면 재실행 할 것입니다 (원하는대로). 그러나 나는 또한 모든 undo (새로운 행과 행 2와 1의 추가)를 잃어 버리고 계속 유지하려고합니다. 그래서 내가 가지고있는 유일한 선택은 내부를 "엉망으로 만들기"시작하는 것입니다, 그렇죠? –

+0

빈 배치를 지울 수있는 PR을 작성하십시오. 나는 그것이 꽤 쉽다라고 생각한다. –

+0

이것이 기존 Redo를 제거하는 데 어떻게 도움이되는지 이해하지 못합니다. 아니면 내가 완전히 메멘토 내부를 오해 했나요? 내가 이해할 수 있듯이, Memento는 모니터링하는 각 객체에 대해 실행 취소 및 다시 실행 대기열을 가지며 작업은 대기열로 이동합니다. –