2013-12-16 6 views
5

ちょっと変だけど、実用的なサンプルはどこにも見つからない。誰でも簡単な導体例<T>.Collection.AllActiveの使用例を提供できますか?

ところで、これが重要なのであれば、私はViewModel-first approach(WPF)を使用しています。

ありがとうございます。

+0

これから何を達成したいか –

+0

ViewModelsで3つのビューを1つの「コンテナ」に読み込みたいとします。 – EngineerSpock

+0

以下の回答はあなたのために働いたのですか? –

答えて

8

あなたが議論hereを見てみると次のように表示されますAllActiveの目的は、複数のViews/ViewModelを含むViewModelに組み立てることです。あなたの前のコメントから判断すると、これがあなたが期待していたもののようですが、私はここで少なくともそれを参照していたはずです。

次に、ビューのさまざまな領域で3つの異なるViewModelをアクティブにすることについて説明します。これまで私がこれを処理してきた方法は、ViewのViewModelをバインド/参照するためのプロパティを個別に用意し、すべてのアイテムをItemsに追加してConductorの動作を取得することです。

public sealed class MyViewModel : Conductor<Screen>.Collection.AllActive 
{ 
    public MyViewModel(IMagicViewModelFactory factory) 
    { 
     FirstSubViewModel = factory.MagicallyGiveMeTheViewModelIWant(); 
     SecondSubViewModel = factory.MagicallyGiveMeTheViewModelIWant(); 
     ThirdSubViewModel = factory.MagicallyGiveMeTheViewModelIWant(); 

     Items.Add(FirstSubViewModel); 
     Items.Add(SecondSubViewModel); 
     Items.Add(ThirdSubViewModel); 
    } 

    public Screen FirstSubViewModel { get; private set; } 
    public Screen SecondSubViewModel { get; private set; } 
    public Screen ThirdSubViewModel { get; private set; } 
} 

MyViewでは、このようなことがあります。もちろん、ビューに希望する場所にこれらの文字を入力することもできます。

<StackPanel> 
    <ContentControl x:Name="FirstSubViewModel" /> 
    <ContentControl x:Name="SecondSubViewModel" /> 
    <ContentControl x:Name="ThirdSubViewModel" /> 
</StackPanel> 

AllActiveの別のよくある用途は、アイテムのリストがある場合です。しかし、項目は、起動を必要とする独自のView/ViewModelsを持つことを保証するのに十分複雑です。その場合は、リストコントロールのx:NameItemsに設定するだけで、ビューの個別のプロパティを設定する必要はありません。

0

あなたは、以下のように実装するのですTabViewModel

の場所でTreeViewModelを使用することができますShellView

<DockPanel> 
     <Button x:Name="OpenTab" 
       Content="Open Tab" 
       DockPanel.Dock="Top" /> 
     <TabControl x:Name="Items"> 
      <TabControl.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding DisplayName}" /> 
         <Button Content="X" 
           cal:Message.Attach="DeactivateItem($dataContext, 'true')" /> 
        </StackPanel> 
       </DataTemplate> 
      </TabControl.ItemTemplate> 
     </TabControl> 
    </DockPanel> 

のViewModel

public class ShellViewModel : Conductor<IScreen>.Collection.AllActive { 

      System.Collections.Generic.List<TabViewModel> tabViewModelCollection = new System.Collections.Generic.List<TabViewModel>(); 

      public void ActiveAllTab() { 

       foreach (var tabViewModel in tabViewModelCollection) 
       { 
        ActivateItem(tabViewModel); 
       }   
      } 
     } 
+0

ShellViewの外観はどうですか? – EngineerSpock

+0

私の答えは –

+0

に更新されました。これはTabControlでのみ有効ですか? – EngineerSpock

関連する問題