2011-11-14 2 views
0

시각적 일 필요가없는 "서비스"사용자 지정 컨트롤이 있습니다. VM에 바인딩하여 일부 기능을 수행 할 수 있도록 내보기에 추가합니다.템플릿없는 사용자 정의 컨트롤을 만듭니다. OnApplyTemplate

스타일과 같이 보입니다 :

<Style TargetType="controls:IdattInteractions"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="controls:IdattInteractions"> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

보기 내 컨트롤 OnApplyTemplate를 호출되지 않습니다 초기화합니다. 그게 ControlTemplate이 비어 있기 때문입니까? 필요한 기능을 어떻게 달성합니까? 일부 기능에 대해이 컨트롤 주위에 시각적 트리를 프로빙해야하고 OnApplyTemplate 내부에서이를 수행하고 싶습니다.

어떻게해야합니까?

답변

1

내가 아는 한, "컨트롤"이 비주얼이라면, 그것은 메모리에서 실행되고 필요하다면 ViewModel과 상호 작용하는 어떤 클래스의 비즈니스 로직 객체 여야합니다. XAML에서 선언 할 필요가 없습니다.

+0

오랜 토론이지만 시각적 기능의 일부이기 때문에 특정 상황에 대한 제어가 끝났습니다. 따라서 시각적으로 영향을 미치지 만 VM에 바인딩되고 이벤트를 수신하여 수행해야 할 작업을 수행합니다. – katit

+0

이제는 전체 뷰에 대해 VM이 있지만 해당 뷰 내부에서 컨트롤을 올바르게 작동 시키려면 논리 백 엔드가 필요합니다. 이 경우 뷰의 뷰 모델과 상호 작용하는 컨트롤의 뷰 모델이 있어야합니다. –

+0

첨부 된 동작이 동일하게 수행되는지 확인하려고합니다. 그것보다 깨끗한 해결책 같아 보인다. – katit

0

리소스로 선언하여 "보기에 추가하십시오"라고 추측합니다. 이 경우 OnApplyTemplate을 호출하지 않는 이유는 컨트롤이 시각적 트리의 일부가 아니기 때문입니다. (테스트 해 보면, 디버거에서 생성자의 마지막 부분에서 휴식을 취할 수 있습니다. 컨트롤이 내부에있는 ResourceDictionary가 있습니다. 컨트롤에 도달 할 때까지 Parent 속성을 계속 따라가보십시오. null 내에서 꽤 빠르게 계층 내에서.

OnApplyTemplate에서 전화를 받으려면 사용자 지정 컨트롤을 다른 컨트롤의 루트 레이아웃 컨테이너에 추가해야합니다. 그러면 시각적 인 나무 안에있게 될 것입니다.

관련 문제