我有一個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的全部潛力 - 我覺得這是我應該的在這種情況下做...