2011-12-28 17 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;} 
    } 

請注意,這是「遞歸」與嵌套在同一視圖模型。這樣做的目的是表示文件夾的樹形結構。我用treeview來表示數據結構,一切都很完美。現在我需要讓我的「外部」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> 

我是否需要手動提高我的RoutedEvent在我IsSelected執行(如何做到這一點?),或者使用它是有一個更好的方法來做到這一點。這裏的問題是我現在知道哪個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} 

希望它能幫助。我沒有實施自己。只是一個想法。

相關問題