2012-03-14 3 views
0

저는 프리즘 WPF 응용 프로그램을 작성 중입니다. 시나리오에는 ViewF가 포함 된 뷰 (필터는 ViewF를 말함)와 ViewF가 포함 된 2 개의 다른 뷰가 있습니다. XAML에서 다음과 같은 뭔가 :여러 UserControls에서 사용되는 Usercontrol의 단일 인스턴스

<UserControl View1> 
    <local:ViewF/> 
</UserControl>` 

<UserControl View2> 
    <local:ViewF/> 
</UserControl> 

문제는 내가이는 뷰 1와 뷰 2에 동일한 인스턴스 및 ViewF의 상태를 사용하고 싶습니다. View1과 View2에 ViewF의 datacontext를 전달하려고했지만 xaml 자체가 다른 인스턴스를 생성하기 때문에 작동하지 않습니다.

아무 아이디어 나 공유 방법을 알려주세요.

답변

1

다른 부모에 UserControl의 동일한 인스턴스를 사용할 수 없습니다. XAML은 The instance of UserControl is already added as child to another container과 같은 예외를 생성합니다. UserControl의 "동일한 인스턴스"가 필요한 이유는 무엇입니까? 그것은 불가능. 어떻게 든이 기능을 DataContext을 통해 공유해야합니다.

+0

. 귀하의 의견은 내 생각을 바른 길로 인도합니다. 나는 MVC와 비슷한 것들을 잊고 있었다. 데이터를 공유하지 않습니다. – Yash

0

귀하의 문제를 올바르게 이해했다면, 귀하를 도울 것입니다.

각보기에는 ViewModel이 있다고 가정합니다. View1VM, View2VM 및 ViewFVM은 View1, View2 및 ViewFM 각각의 VM입니다. MainVM을 View1과 View2를 호스팅 할 창의 ViewModel이라고합시다.

ViewVM의 인스턴스를 MainVM에 두십시오. View1VM 및 View2VM의 인스턴스를 생성하는 동안 MainVM의 인스턴스를 삽입하고 (관련 데이터 만 각 뷰에 노출되도록 인터페이스를 사용할 수도 있음) View1과 View2에 모두 mainVM의 ViewFVM 인스턴스를 반환하는 속성이 있어야합니다. 이것을 xaml의 ViewF의 datacontext에 바인드합니다. 코드 같은 것

, 뷰 1와 뷰 2에 대한 즉 각 뷰의 XAML에서

public class ViewFVM 
{ 
    //Store the state of ViewF 
} 

public class MainVM 
{ 
    public ViewFVM viewFVM; 
    public MainVM() 
    { 
     View1VM view1VM = new View1VM(this); 
     View2VM view2VM = new View2VM(this); 
    } 
} 

public class View1VM 
{ 
    private MainVM _mainVM; 
    public View1VM(MainVM mainVM) 
    { 
     _mainVM = mainVM; 
    } 

    public ViewFVM ViewFViewModel {get {return _mainVM.viewFVM;}} 
} 

public class View2VM 
{ 
    private MainVM _mainVM; 
    public View2VM(MainVM mainVM) 
    { 
     _mainVM = mainVM; 
    } 

    public ViewFVM ViewFViewModel {get {return _mainVM.viewFVM;}} 
}  

는 바인딩을 통해 데이터 컨텍스트로 ViewFViewModel을 설정합니다.

0

필터를 공유 resource으로 정의 할 수 있습니다. 거의 같은 일에 싸움

<Application.Resources> 
    <local:ViewF x:Key="filters"/> 
</Application.Resources> 
<UserControl> <!-- View1 --> 
    <StaticResource ResourceKey="filters"/> 
</UserControl> 
<UserControl> <!-- View2 --> 
    <StaticResource ResourceKey="filters"/> 
</UserControl> 
관련 문제