2012-03-14 12 views
0

私はPrism WPFアプリケーションに取り組んでいます。 シナリオには、ViewFが含まれている2つのビューとViewFがあるビューがあります。 XAMLで、以下のような何か:複数のUserControlsで使用されるUsercontrolの単一のインスタンス

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

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

問題は、私はView1をしてVIEW2にviewFのの同じインスタンスと状態を使用したいです。 ViewFのdatacontextをView1とView2に渡そうとしましたが、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のインスタンス(各ビューに関連するデータのみが公開されるようにインタフェースを使用することもできます)を注入し、ViewVM1のインスタンスを返すView1とView2の両方にプロパティを持ちます。これをxamlのViewFのdatacontextにバインドします。

コードは、View1をしてVIEW2のためにすなわち、各ビューの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;}} 
}  

、のようになる、の結合を介してのDataContextとしてViewFViewModelを設定します。

0

フィルタを共有としてresourceと定義することができます。ほぼ同じものと戦っ

<Application.Resources> 
    <local:ViewF x:Key="filters"/> 
</Application.Resources> 
<UserControl> <!-- View1 --> 
    <StaticResource ResourceKey="filters"/> 
</UserControl> 
<UserControl> <!-- View2 --> 
    <StaticResource ResourceKey="filters"/> 
</UserControl> 
関連する問題