2011-01-26 3 views
2

다양한 요소의 가시성이 ViewModel의 일부 속성에 바인딩되는 Silverlight UI에서 상당히 일반적인 상황이 있습니다. 경고 상태가 trueSilverlight보기에서 깜박임을 방지하려면 어떻게합니까?

<myapp:WarningView Visibility="{Binding IsInWarningState}" /> 

경우, 우리는, 우리가하지하지 않을 경우, 컨트롤을 표시하려면 : 예를 들어,이 같은 컨트롤을 가질 수있다. 문제는 페이지가 렌더링되고 WarningView 컨트롤을 포함하여 모든 콘텐트를 표시하는 많은 상황을 가지고 있고, 그 다음에 잠시 후 뷰가 숨겨져 서투른 것처럼 보입니다.

나는 View가로드되어 서버를 비동기 적으로 호출하여 데이터를 가져 오는 것으로 생각하지만, 그렇게되기 전에는 DataContext가없고 WarningView가 바인딩 할 기본값이 아니며 기본값은 컨트롤을 표시하는 것입니다.

뷰가 자신의 뷰 모델을 인스턴스화하는 것이 가장 깨끗하게 보입니다. 적어도 지금은 내가하고있는 것입니다. 그리고 호출이 비동기이기 때문에 무언가를 보여주고 싶지만 아직 보여줄 실제 데이터가없는 경우에는 일정 간격이있을 수 있습니다. 더 나은 기본값으로 모의 ViewModel을 만드는 것을 상상할 수도 있지만, 프로젝트 전반에 걸쳐 많은 일을하는 것처럼 보입니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

+0

VM에서 IsInWarningState의 기본값이 true 또는 false입니까? –

+0

False. 컨트롤이 숨겨져 있어야하고 VM이로드되면 숨겨 지지만 표시 될 때까지는 깜박임이 발생하는 이유입니다. –

+0

VM에서 비동기 호출이 완료 될 때까지 기다리는 이유는 무엇입니까? IsInWarningState 속성에 대한 코드를 포함시켜 주시겠습니까? ViewModel을 뷰에 연결하는 방법은 무엇입니까? –

답변

4

글쎄, 내가 이것을 포기하면 오랫동안 스스로 답을 찾았습니다 : 바인딩에서 FallbackValue 및/또는 TargetNullValue를 지정할 수 있습니다. 바인딩 할 대상이 ' 구할 수 없거나 널입니다. 내 문제는 View가로드되어 ViewModel을 만들고보기가 표시되고 바인딩이 완료되면 컨트롤이 표시되고 바인딩이 축소되어 플리커가 발생하는 순간입니다. 폴백 값을 설정하면 컨트롤이 축소되어 있는지 확인한 다음 바운드 된 경우에만 켜기를 계속할 수 있습니다. 깜박임 없음.

+0

+1 감사합니다. 나는 이것을 수년간 찾고 있었다는 것을 느낀다! ''FallbackValue''가 트릭을했습니다. 내가이 사실을 더 일찍 알았다면. 왜 내가 이것에 upvoted 유일한 사람인가? –

+0

대단히 반갑습니다. 나는 또한 이것이 사람들이 만났을 일반적인 상황이라고 생각했을 것이다. 그러나 질문에는 많은 견해가 없기 때문에 아무도 그것에 대답하지 않았기 때문에 나는 생각하지 않는다. 그래서 아무도 그 문제에 부딪치지 않았을 것입니다. 믿기 ​​힘들지만 거기에 있습니다. –

관련 문제