2012-02-19 2 views
0

애니메이션이 끝났을 때 알려주는 의존성 속성을 찾고 있는데요. 뷰에 배경을 애니메이션해야한다고 알리기 위해 "IsDirty"속성을 설정하여 값이 변경 될 때 플래시를 표시하고 있지만 다음 변경을 위해 값을 재설정해야합니다.내 ViewModel에서 애니메이션이 완료된 시점을 확인하는 방법은 무엇입니까?

내가 무슨 뜻인지 알기를 바랍니다.

EDIT : 플래시를 표시하려면 스토리 보드를 사용하고 있습니다.

+0

'속성을 "값 변경됨"으로 설정하면 악용 사례입니다. 이벤트가 발생하면 이벤트가 발생하고 "값이 변경되었습니다"속성은 속성이 아닙니다. –

+0

@ H.B : 속성이 공통 기준 인 "IsDirty"또는 "IsValueDirty"라고 불리우면 더 편하게 느껴지겠습니까? –

+0

실제로 그렇게 사용된다면 완전히 다른 (받아 들일 수있는) 문제가 될 것입니다. 그러나 당신의 설명은 아무것도 들리지 않는다. 적절한 * IsDirty *는 애니메이션 마무리에 의해 지워지지 않는다. –

답변

1

StoryBoard에 대해 Completed event을 처리하고 그 시점에 알림을 설정할 수 있습니다. 나는 당신이 코드를 피하기를 원한다는 것을 알았지 만, 데이터에 바인딩 할 수있는 "IsComplete"에 대해서는 StoryBoard에 그러한 의존성 프로퍼티가 없기 때문에이 인스턴스에서 필요하다고 생각한다.

+0

첨부 된 속성으로 뭔가를하고 있습니까? 나는 그들을 언제 사용해야할지 아직 확신하지 못한다. 스토리 보드를 확장하고 바인딩 할 때 사용할 수 있습니까? –

+0

물론, 스토리 보드의 IsComplete를 모방하기 위해 첨부 된 속성을 사용해 볼 수도 있습니다.하지만 더 많은 코드가 포함되어 이벤트 처리기를 작성해야합니다. – Reddog

+0

사실 플래시가있는 항목이 많습니다. 속성을 바인딩 할 수 있으면 모든 Completed 이벤트를 코딩하는 코드가 훨씬 적어집니다. 그러면 첨부 된 속성을 살펴 보겠습니다. 그게 할 수 있다고 확신합니까? –

0

당신은 그러지 않아야합니다.

viewmodel은보기 실행에 대한 단서가 없어야합니다.보기가 애니메이션 실행을 끝낸 것은 물론입니다. VM이 IsDirty 속성을 가지고 있어도 괜찮습니까? 뷰가하는 일은 그 일에 달려 있으며, VM은 그것에 대해 알 필요가 없습니다. 그러나 해당 플래그의 사용을 검토해야합니다. 일반적인 사용법은 데이터가 변경되고 저장되지 않은 상태임을 나타내는 것입니다. UI 애니메이션이 끝나면 VM이 여전히 더티 상태에 있으므로이 플래그를 사용하여 토글하지 않아야합니다. 데이터가 변경 될 때마다 애니메이션이 적용됩니다 (일반 PropertyChanged 이벤트 사용).

편집 : 여기
는 의견에 응답하여 좀 더 설명이다.

IsDirty는 변경 사실을 사용자에게 알려야 함을 의미합니다.

데이터가 변경되었다는 것을 사용자에게 알리는 데는 여러 가지 방법이있을 수 있습니다. 상태 영역의 아이콘과 같은 일회성 이벤트, UI 플래시 등이 될 수 있습니다. IsDirty 플래그는 변경된 데이터가 저장된 시점을 VM이 알기 때문에 VM에 의해서만 재설정되어야합니다. 뷰는 저장 메커니즘을 트리거하는 버튼 (또는 무엇이든)을 제공하지만 실제로 데이터가 실제로 저장되었는지 여부는 알지 못하므로 뷰가 해당 플래그를 재설정하면 안됩니다. 알림이 완료되었음을 알리기 위해보기가 필요하지 않습니다. 사용자가 데이터와 상호 작용하지 못하도록 애니메이션이 실행되는 동안 저장 버튼이나 다른 UI 요소를 비활성화 할 수 있습니다. 당신이 모든 시간 데이터 변경 사항을 통보 할 경우 위에서 언급 한 바와 같이

, 당신은 VM의 인터페이스를 통해 PropertyChanged 이벤트를 노출시킬 수의에서 INotifyPropertyChanged 인터페이스를 구현, 다음 뷰는 구독 할 수 있습니다 당신은 트리거 할 수 있습니다 관심있는 속성 변경에 대한 애니메이션입니다. 속도를 제한하려면주의해야합니다. 빠른 속성 변경에 대한 응답으로 애니메이션에 미쳐 가고 싶지는 않습니다.

* 아직 뷰를 조작하고 응답 할 수있는 VM에 대한 올바른 사용법은 아직 알지 못합니다. 많은 사람들이 그것을하지만, 단지 그 방법으로 그들을 강제로 나쁜 디자인입니다.

+0

나는 네가 의미하는 바를 안다.하지만 나는 그 질문을 너무 빨리 그리고 너무 간단하게 썼다. 나는 동의한다, VM은보기에 대한 단서가 없다. IsDirty는 사용자가 변경 사항에 대해 통지를 받아야 함을 의미합니다. 일단 사용자가보기 (하지만)에 의해 통지를 받으면보기가 바인딩을 통해 IsDirty 속성을 재설정해야한다는 것을 이해합니다. (애니메이션이 끝났을 때 알려주는 dp입니다.) 이런 식으로 View는 VM의 권리를 적게 인식합니까? –

+0

내 편집을 확인하십시오. 도움이되기를 바랍니다. – slugster

+0

IsDirty 속성을 사용하면 혼란 스럽다고 생각합니다. 이 값을 사용하여 변경 사항에 대해 사용자에게 알려주고 저장하지 않도록 지정해야합니다. ViewModel은 View를 인식하지 못하기 때문에 사용자에게 통지되었는지 여부를 알 수 없습니다. –

관련 문제