2014-04-14 3 views
0

나는 자식 창이있는 Grid입니다. 이 아이들 중 일부는 복잡한 변환기가있는 MultiBinding입니다. 이제 격자 (Collapsed 또는 Hidden)를 숨기면 변환기가 여전히 호출 중입니다. 왜?!내 변환기가 숨겨진 창에서 호출되는 이유는 무엇입니까?

UI 요소를 숨기면 렌더러가 시각적 트리를 완전히 건너 뛸 것으로 예상됩니다. 더 구체적으로 말하면, "숨겨진"컨텍스트에서 작동 할 때 변환기를 호출하지 않기를 바랍니다! 아이디어? 요소의 Visibility 속성이 Collapsed 또는 Hidden 경우에도

+1

당신의 가시성을 상상해이 더 우아한 해결책이 될 수 있지만 아무도 더 나은 방법의 전부 논리적 트리에서 요소를 제거하는 짧은 생각하지 않는 경우이 트릭을 할해야 하나의 컨트롤이 VM의 속성에 바인딩됩니다. 컨트롤이 보이지 않을 때 바인딩이 업데이트되지 않으면 컨트롤을 다시 표시 할 때를 어떻게 알 수 있습니까? 비주얼 트리에서 컨트롤을 완전히 제거하는 것 외에는 방법이 없다고 생각합니다. 속성이 설정되었다고해서 그것이 시각적 트리에 존재하지 않는다는 것을 의미하지는 않습니다. – Kcvin

답변

1

그것은 논리적 트리의 일부가 남아 있고 따라서는 컨버터 요소가 표시되지 않는 동안 작업을 계속 완벽하게 정상입니다.

요소가 축소 또는 숨김 상태 일 때 값 변환을 사용하지 않도록 설정하는 간단한 방법은 ConverterParameter Property을 사용하고 요소의 Visibility 속성에 바인드하고 변환기 속성에서이 속성이 축소 또는 숨김으로 설정되어 있는지 확인한 다음 변환을 건너 뜁니다. ...입니다

+0

나는 이것에 대해 잘 모르겠습니다. 그 이유는 대답에 포함시키지 않았지만, 축소 또는 숨김 상태로 변경했을 때 제어 기능을 사용하지 않으면 값 변환도 비활성화됩니다. 그것을 시도하고 그게 어떻게 효과가 있었는지 알려주시겠습니까? –

+0

상위 부모 'UIElement'에서'IsEnabled = "False"를 설정해도 도움이되지 않습니다. 내 변환기가 아직 호출 중입니다. – l33t

관련 문제