2011-01-09 4 views
0

나는 SL 사용자 컨트롤이 간단하다. 모든 고객을 표시하는 목록 상자 및 오른쪽에는 목록 상자의 SelectedItem (고객)에 바인딩 된 여러 텍스트 상자 및 콤보 상자가 표시됩니다. SelectedItem은 SelectedCustomer 속성에 바인딩됩니다.Silverlight Twoway 바인딩 및 롤백 변경 - 방법?

나는 (바운드 텍스트 상자와 콤보 상자에서) 고객에 대한 변경을 취소하는 패턴/방법론을 찾고 있습니다.

편집 컨트롤 (텍스트 상자 및 콤보)은 목록 상자의 선택된 항목에 단방향 또는 양방향 바인딩 될 수 있습니다. 양방향으로 바인딩 된 경우 텍스트 상자의 즉각적인 변경 내용이 목록 상자에 반영됩니다. 한쪽 경계에 있으면 텍스트 상자의 변경 사항이 SelectedCustomer 객체에 반영되지 않습니다.

편집 양식의 하단에는 일반적인 저장, 취소, 삭제 버튼이 있습니다. 예를 들어 save 버튼은 SelectedCustomer 객체를 취할 것입니다 (twoway bound이면 서버에 저장하기 위해 서비스를 통해 보낼 것입니다).

텍스트 상자가 한 방향으로 묶인다면 어떻게 든 텍스트 상자 값을 캡처하고 저장을 위해 서버로 보내기위한 개체에 삽입해야합니다.

twoway 바인딩을 사용하고 저장 작업이 실패했다고 말하면 SelectedCustomer 값을 원래 값으로 다시 설정해야합니다. 그렇지 않으면 클라이언트는 이제 저장되지 않은 데이터를 계속 볼 수 있습니다.

은 .... 이런 종류의 시나리오를 처리하는 쉬운 방법이 있어야합니다 것을 쉽게 사용자 좌절에 이르게로

답변

0

Entity Framework의 RIA 서비스는 기본적으로이 기능을 제공합니다. 기본적으로 RIA 서비스가 작동하는 방식이며 다음과 같이 처리 할 수도 있습니다.

각 클래스는 BeginEdit/EndEdit 및 CancelEdit 메서드를 제공하는 IEditableObject라는 인터페이스를 구현합니다. 또한 서버에서로드 된 값과 동일한 값을 가진 "OriginalEntity"라는 이름을 가진 동일한 클래스의 인스턴스를 저장 (복사)합니다.

양식을 사용자가 수정할 수있게 표시 한 후 BeginEdit가 호출됩니다. 이는 리플렉션을 사용하여 모든 속성을 일종의 사전에 캐시합니다. CancelEdit를 호출하면 OriginalEntity의 값이 객체에 다시로드됩니다.

변경 사항을 저장하는 동안 오류가 발생하면 서버에서 엔티티를 새로 고치거나 (최상의 방법) OringalEntity 속성에서 속성을 다시로드 해 볼 수 있습니다.

+0

좋아, 그럼 내가 뭘했는지는 고객 클래스, 즉 퍼블릭 partial class Customer : SL 애플리케이션의 IEditableObject에 대한 부분 클래스가 생성된다. 메서드 내에서 여기에 비슷한 코드를 제공 http://www.silverlight.net/learn/tutorials/silverlight-4/web-services-and-silverlight/#Exercise3 – David

+0

-1 수락 된 답변을 원하십니까? 제발 ... 미스터 스마트 -1 유권자 ... –

0

나는, 사용자의 변경 사항을 취소하지 않을 것입니다. IMHO, 제어되지 않은 데이터 롤백으로 연결 문제에 대해 사용자에게 알리면 안됩니다.

+0

사실, 내 특정 시나리오에서 사용자가 버튼 취소를 치는 것이므로 편집 양식과 목록 상자에서 만든 편집을 롤백해야합니다. – David