2013-06-05 1 views
2

오히려 WPF와 MVVM을 처음 사용하고 TabControl과 관련된 문제가 발생하여 탭 사이를 전환 할 때 데이터를 보존하려고합니다. 기본적으로보기 내부에 TabControl이 있고 TabItems는 동적으로로드되고 사용자 상호 작용에 따라 제거됩니다. 각 TabItem은 고유 한 viewmodel이있는 자체 뷰인 UserControl입니다.동적으로 뷰의 DataContext를 WPF로 설정하는 방법 MVVM

TabItem이 제거 될 때마다 (항상 다른 탭으로 이동하는 것이 아니라 때로는 탭이 실제로 제거되고 재생성됩니다.) 해당 뷰 모델의 인스턴스를 저장하고 데이터를 보존하지만 해당 데이터를 다시 가져 오는 데 문제가 있습니다. 탭을 다시 만들 때. 나는 TabItems

<DataTemplate x:Key="MyView" DataType="{x:Type vm:MyViewModel}"> 
    <uc:MyView /> 
</DataTemplate> 

을 만들기 위해 DataTemplate을을 사용하고있는 TabControl에 있음을 참조하고있다.

<TabControl ItemsSource="{Binding ViewModelList, Mode=TwoWay}" 
      ContentTemplate="{StaticResource MyView}" 
      ItemTemplate="{StaticResource MyHeader}" 
      SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}" /> 

모든 멀리 방식 모두가 표시 될 때 작동하지만 난 내 UserControl을의 비어있는 새 버전마다 얻을. ViewModelList로 설정된 itemssource는 정확하게 들리지만, 각 탭의 상태를 저장하여 다시 만들 수있는 뷰 모델 인스턴스의 목록입니다. 여기서 문제는 여기에서 사용 된 DataTemplate 접근 방식이 새로운 TabItem이 만들어 질 때마다 생성되는 뷰의 새로운 인스턴스에 내 viewmodel 데이터를 묶는 방법을 실제로 제공하지 않는다는 것입니다.

MVVMLight 또는 Prism을 사용하고 있지 않지만 여기에서 사용하려고했던 맞춤 EventAggregator가 있습니다. 내가 가지고있는 문제는 정확한 시간에 viewmodel의 올바른 인스턴스로 데이터를 가져 오는 것입니다. 내 문제의 일부는 MyViews datacontext가 코드 숨김 생성자에서 MyViewModel의 새 인스턴스로 설정되고 다른 작업을 무시하고 전달하는 것입니다.

난 그냥 수정하는 방법을 모르겠다. 이. 오랜 질문에 사과 드리지만 모든 것을 시도하고 싶었습니다. 더 많은 정보가 필요하신 분은 미리 알려 주시기 바랍니다.

답변

2

흠 실제로는 모르겠지만 촬영 가치가 있습니다. 당신이 작동하지 않을 수 있습니다 귀하의 DataTemplate

<DataTemplate x:Key="MyView" DataType="{x:Type vm:MyViewModel}"> 
    <uc:MyView DataContext={Binding} /> 
</DataTemplate> 

같이 수정하면 나는 생각한다. 그것을 시도하고 알려주세요.

이상한 점입니다. MSDN

  • 항목에서 - ItemsControl의 내용을 생성하는 데 사용되는 컬렉션을 가져옵니다. (ItemsControl에서 속됨).

[...]

  • ItemsSource - 가져 ItemsControl의 내용을 생성하기 위해 사용되는 컬렉션을 설정한다. (ItemsControl에서 상 속됨.)

대신 Items를 사용하려고 할 수 있습니다.

+0

글쎄 아무것도 바뀌지 않았는지 알기가 어렵습니다. 나는 조금 더 파헤쳐 야 할 것이다. 내가 생각해 보았던 바로 그 아이디어의 종류. 단지 가능할 수 있기를 바랍니다. – aw04

+0

작동합니까 아니면 그렇지 않습니까? – DHN

+0

아니 적어도 그 자체로 – aw04