문제

MVVM 아키텍처를 사용하여 응용 프로그램을 분리합니다. 즉, 당신은 종종 같은 것을 볼 수 있습니다

var u = new UserControl();
u.Content = new MyCustomType(); // MyCustomType is not a control

UI는 자체 XAML 파일의 리소스 사전에있는 데이터 템플릿을 통해 정의됩니다.

<ResourceDictionary ...>
    <DataTemplate DataType="{x:Type local:MyCustomType}">
        ...

응용 프로그램 시작시 리소스를로드하고 응용 프로그램은 UI를 기꺼이 표시합니다. 그러나 데이터 템플릿을 제거하고 새 템플릿 (동일한 키, 동일한 데이터 유형)을 추가하면 UI는 여전히 이전 데이터 템플릿을 사용합니다. 물론 컨테이너의 내용을 다시 설정하여 새로 고침을 강요 할 수는 있지만 이와 같은 변화에 대한 모든 컨트롤에 알릴 필요가 있기 때문에 이것은 구아처럼 보입니다.

var tmp = control.Content;
control.Content = null;
control.Content = tmp; // New data template will be used

다른 접근법이 있습니까?

도움이 되었습니까?

해결책

사전에서 자원이 정적이기 때문입니다. 그들이 사용되면 업데이트되지 않습니다. 사전을 다시로드하려고 시도 할 수 있지만 이전 컨트롤이 아닌 새로운 컨트롤 만 업데이트 할 수 있습니다.

여러 DataTemplates를 지원하려면 DataTemplatesLatesector 클래스를 고려할 수 있으며 조건에 따라 템플릿을 선택합니다.http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

템플릿을 '즉석에서'전환 해야하는 경우 항상 ControlTemplates와 제어의 템플릿 속성에 대한 바인딩을 사용하는 것을 고려할 수 있습니다 ...

{Binding Converter={StaticResource YourAwesomeTemplateSwitcherConverter}}

HTH

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top