추가 클래스로 VM을 래핑 할 수 있습니다. DataTemplates는 Wrapper 클래스의 유형을 결정하지만 실제 구현은이 Wrapper의 속성을 통해 노출 자입니다. 이 속성을 변경하면 DataTemplate은 다시로드되지 않지만 모든 바인딩은 새로 고쳐집니다.
래퍼 클래스 :
public class WrapperVM1:INotifyPropertyChanged
{
public Content VM1 { get{...} set{...} }
}
public class WrapperVM2:INotifyPropertyChanged
{
public Content VM2 { get{...} set{...} }
}
지금 데이터 템플릿을 설명합니다 래퍼 클래스 표현 :
<DataTemplate DataType="{x:Type local:WrapperVM1}">
<TextBlock Text={Binding Content.SomPropertyInVM1}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:WrapperVM2}">
<TextBlock Text={Binding Content.SomPropertyInVM2}"/>
</DataTemplate>
당신이 VM의 새로운 인스턴스 래퍼의 Content 속성을 대체 할 경우 당신이 볼 수 있듯이 뷰를 다시 생성하지는 않지만 모든 바인딩이 업데이트됩니다. 그러나 다른 유형의 VM으로 전환해야하는 경우 Wrapper 클래스를 적절한 래퍼로 대체해야합니다.
귀하의 질문에 많은 정보가 부족합니다. 매번 XML 파일을 구문 분석하는 이유는 무엇입니까? XML 파일 데이터가 작성중인보기에 미치는 영향 적어도 단순화 된 시나리오를 줄 수 있습니까? – Dmitry
그 질문에 대답하는 데 필요한 것은 없습니다. 뷰 또는 뷰 모델을 재구성하고 싶지 않습니다. viewmodel이 바인딩 될 때마다 뷰를 손상시키지 않고 DataTemplates를 사용하는 방법이 있는지 묻는 것입니다. – ConditionRacer