런타임시 데이터 템플릿을 전환 - 문제를 새로 고치십시오
-
11-07-2019 - |
문제
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
제휴하지 않습니다 StackOverflow