0

ComboBox 컨트롤 - CustomComboBox에서 다소 재미있는 케이스가 있습니다.Silverlight의 TemplateBinding DataContext

이 ComboBox의 스타일에서 Popup에는 DataContext를 요청하는 사용자 지정 컨트롤이 하나 있습니다.

<ctrl:CustomGrid DataContext="{TemplateBinding DataContext}" GridName="{Binding Preferences.CurrentGridName}"/> 

아이디어 :

  • 이 masterpage 컨테이너에서 사용하기 위해 한 페이지에이 컨트롤을
  • 을 여러 번 사용할 수는
  • masterpage 컨트롤은 페이지 그것과 관련된 다른 DataContexts을 가질 필요 가 켜짐

로직 :

오버라이드 (override) OnApplyTemplate에서
  • 내가 그리드를 얻고 연결하고 몇 eventhandlers

문제 다음 masterpage 컨트롤은 한 번만 CustomComboBox의 첫 등장은

  • OnApplyTemplate을 유발한다

    • 예상대로 그러나, 모든 다음 apearance는 CustomComboBox 의 데이터 컨텍스트를 변경하는 경우에도 이러한 변경 내 CustomGrid의 DataContext를 변경할 수에 도달하지 않는 같은 DataContext를 함께

    내가 바인딩 또는 프리젠 테이션 로직에 뭔가가 확신 나쁜 ... 는 ControlTemplate이 (어느 부모,도 어린이) 메소드를 오버라이드 (override) 컨트롤에 적용 할 때 내가 여기

    감사

  • +0

    여러 콤보 박스를 사용하는 데 도움이되도록 마크 업에 대한 자세한 내용을 제공해주십시오. 마스터 페이지, 페이지 및 콤보 박스는 어떻게 관련이 있습니까? 어떤 컨트롤의 템플릿 부분을 게시 했습니까? 그리드에 액세스하는 코드는 무엇입니까? –

    답변

    1

    OnApplyTemplate 호출을 힌트를 부탁드립니다에 어떤 생각을 던져주십시오. OnApplyTemplate을 한 번 입력하면 무시 제어도 한 번 만들어야합니다. 제 말은 단일 마스터 페이지 인스턴스입니다. 이것은 예상치 못한 것이 아닙니다.

    PopupDataContext에 대해 말하면, Popup에서 외부로 바인딩하는 데 종종 문제가 있습니다. 따라서 Binding에 의존하는 대신 Popup에 정확한 컨텍스트를 전달하기위한 코드 숨김을 작성하고 싶습니다. SL5 이전에는 DataContextChanged 이벤트가 없다는 문제가 있습니다. 이 문제를 해결하려면 CustomComboBox에 맞춤 DependencyProperty을 정의하고 CustomComboBox의 컨텍스트에 바인드하고 PopupPropertyChangedCallback의 값을 지정해야합니다.