2011-12-28 16 views
0

私は、コンピュータ上のファイルシステムに似たワークエリアを持つWPFアプリケーションを用意しています。入れ子のViewModelを持ち、所有しているビューモデルにコマンドをバブルアップしたい

public interface IRepositoryViewModel : IViewModelBase 
    { 
     ObservableCollection<IRepositoryTreeFolderModel> RootFolders { get; set; }   
    } 

IRepositoryTreeFolderModelは、次のように説明されています:

public interface IRepositoryTreeFolderModel : IViewModelBase 
    {   
     Folder Folder { get; set; } 
     ObservableCollection<IRepositoryTreeFolderModel> SubFolders { get; set; } 
     bool IsSelected {get;set;} 
     bool IsExpanded {get;set;} 
    } 

これは、ネストされた同じのviewmodelと「再帰的」であることに注意してください私は、トップフォルダとサブフォルダの一覧を保持しているViewModelにしています。この目的は、フォルダのツリー構造を表現することです。私はツリービューを使用してデータ構造を表し、すべてが完璧に動作しています。今私は私の "外側" IRepositoryViewModelは、ツリー内のフォルダを選択する必要がありますする必要があります。これは私が何かを見逃していると思うところです。何イムやろうとRoutedCommandのを作ることです、そして私の外でそれを消費する「IRepositoryViewModel」

My XAML for the treeView in the workarea is like this: 

<TreeView Background="{x:Null}" ItemsSource="{Binding RootFolders}" > 
      <TreeView.ItemContainerStyle> 
       <Style TargetType="{x:Type TreeViewItem}"> 
        <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
        <Setter Property="FontWeight" Value="Normal" /> 
        <Style.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter Property="FontWeight" Value="Bold" /> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </TreeView.ItemContainerStyle> 
      <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate ItemsSource="{Binding SubFolders}"> 
        <StackPanel Orientation="Horizontal"> 
         <Image Source="/GWManagerAdmin;component/Graphics/Navigation/folder.png" Stretch="None" /> 
         <TextBlock Text="{Binding Path=Folder.Name}"/> 
        </StackPanel>      
       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 
     </TreeView> 

私は手動で私のIsSelected実装で私のするRoutedEventを調達する必要があります(これを行うにはどのように?)またはがありますこれを行うためのより良いアプローチ。ここで問題となっているのは、IRepositoryTreeFolderModelのインスタンスが選択されていることを知っているので、古典的なイベントハンドラを作成して伝播させることはできません - RoutedCommandの潜在能力を最大限に活用したいと思います。このシナリオでは...

答えて

0

私からのちょっとしたアイデア。まず、このhttp://joyfulwpf.blogspot.com/2009/05/mvvm-invoking-command-on-attached-event.htmlを読んであなたを構築することができます。

XAMLでは、このスニペットで親からのコマンドを呼び出すことができます。

Command={Binding RelativeResource={RelativeResource FindAncestor, AncestorType={x:Type TreeView}}, Path=DataContext.YourCommand} 
CommandArgument={Binding} 

はそれがお役に立てば幸いです。私は自分自身を実装していない。ちょうどアイデア。

関連する問題