2013-06-05 1 views
1

내 WPF 응용 프로그램에서 리소스 사전을 사용합니다. MVVM도 사용하고 있습니다.DataTemplate 형식의 Window에 바인딩하는 방법

ResourceDictionary에 바인딩하고 있지만 MainWindow ViewModel을 (Window 유형의) MainWindow에 바인드하려고하지만 MVVM이 MainWindow를 UserControl 유형이 아니게합니다.

<Grid.Resources> 
     <ResourceDictionary Source="Resources\ResourceDictionary.xaml" /> 
    </Grid.Resources> 

    <Grid.DataContext> 
     <Binding Source="{StaticResource Mwvm}" /> 
    </Grid.DataContext> 
</Grid> 

이 내가 객체가 윈도우입니다 만 XAML (I를 사용할 때 하나는 내가하지만 같은 일을 할 수있는 방법을 알고 있나요이

<DataTemplate DataType="{x:Type viewModel:MainWindowViewModel}"> 
    <root:MainWindow x:Key="Mwvm" /> 
</DataTemplate> 

을 할 수 없음을 의미 app.xaml onstartup()에있는 코드를 사용하여이 작업을 수행 할 수 있다는 것을 알고 계십니까?

이 명확이를 만들려면 편집, 내 MainWindow를 내 내 뷰 모델에 네임 스페이스를 선언 할 수 있다는 것을 알고 있지만, 네임 스페이스가 이미 내있는 ResourceDictionary에 참조 할 때 올바른 방법이 있습니다 만 내를 참조하고 있습니다 ResourceDictionary

답변

1

어때요?

<Window> 
    <Window.DataContext> 
     <someNs:YourVmClass /> <!-- calls the empty c_tor of the class--> 
    </Window.DataContext> 
</Window> 

는 (. 난 당신의 질문을 이해하면 내가 확실하지 않다하지만 내가 생각, 그것은 당신이 정말로 원하는거야.)

당신의 편집에 따르면

은 당신이 할 수있는 something like

<!-- Define an instance of your VM in the ResourceDictionary --> 
<ResourceDictionary> 
    <someNs:YourVmClass x:Key="InstOfYourVmClass" /> 
</ResourceDictionary> 

보기에 다음과 같이 할 수 있습니다.

<Grid> 
    <Grid.Resources> 
     <ResourceDictionary Source="Resources\ResourceDictionary.xaml" /> 
    </Grid.Resources> 

    <Grid.DataContext> 
     <StaticResource ResourceKey="InstOfYourVmClass" /> 
    </Grid.DataContext> 
</Grid> 

하지만이 방법을 선택하지 않는 것이 좋습니다. 문제는, 당신이이 ResourceDictionary을 참조 할 때마다, 현재 인스턴스 InstOfYourVmClass은 새로운 인스턴스화 된 버전에 의해 덮어 쓰여질 것입니다.

+0

너무 가까이에 있지만, 이건 내 MainWindow에서 네임 스페이스를 선언하는 것과 관련이 있습니다. ResourceDictionary에서 선언 된 네임 스페이스를 사용하여 두 번 정의하지 않고 (한 번 내 ResourceDictionary에 한 번, 내 MainWindow에 한 번) 정의 할 수 있습니까? 제 질문은 분명하지 않습니다. 지금 업데이트하십시오. +1 – Dave

+0

내 편집을 참조하십시오. – DHN

관련 문제