2016-10-22 2 views
1

私はTreeViewListViewを使用して、C#とWPFでファイルエクスプローラを構築しています。どちらもDataItemというクラスにバインドされています。インポートしたいアイテムを押すと、子供はListViewに行きます。しかし、TreeViewのSelectedItemプロパティは読み取り専用であるため、選択したアイテムをTreeViewに設定して使用することはできません。選択したい項目をに設定するには、ListViewからどうすればいいですか? 私はネットでそれを探し、さまざまな種類のソリューションを試しましたが、運がありません。treeviewのselecteditemをデータバインディングされたカスタムアイテムwpfに設定

データ項目(C#の)のための私のコード:

public abstract class DataItem 
{ 
    private ObservableCollection<DataItem> FolderItems; 

    public String Title {get; protected set; } 

    public DataItem() 
    { 
     this.FolderItems = new ObservableCollection<DataItem>(); 

     this.Title = ""; 
    } 

    public DataItem(DataItem Other) 
    { 
     this.FolderItems = new ObservableCollection<DataItem>(); 

     this.Title = Other.Title; 

     foreach (DataItem Folder in Other.FolderItems) 
     { 
      this.FolderItems.Add(Folder); 
     } 
    } 

    public int Count() 
    { 
     int DataItemsCounter = 0; 

     List<DataItem> FilesList = new List<DataItem>(); 

     foreach (DataItem File in this.Files) 
     { 
      FilesList.Add(File); 

      DataItemsCounter++; 
     } 

     const int Empty = 0; 

     const int FirstItem = 0; 

     while (FilesList.Count != Empty) 
     { 
      DataItem File = FilesList[FirstItem]; 

      FilesList.RemoveAt(FirstItem); 

      ObservableCollection<DataItem> Folder = File.Files; 

      foreach (DataItem SubFile in Folder) 
      { 
       FilesList.Add(SubFile); 

       DataItemsCounter++; 
      } 

     } 

     return DataItemsCounter; 
    } 

    public virtual ObservableCollection<DataItem> Open() 
    { 
     return FolderItems; 
    } 

    public virtual ObservableCollection<DataItem> Files 
    { 
     get 
     { 
      return FolderItems; 
     } 
    } 

    public ObservableCollection<DataItem> Folders 
    { 
     get 
     { 
      return FolderItems; 
     } 
    } 

    public abstract String Format { get; } 

    public String Icon 
    { 
     get 
     { 
      return String.Format("Icons/{0}.png", this.Format); 
     } 
    } 
} 

リストビューとTreeView(WPF)のための私のコード:

<TreeView x:Name="FileExplorerTreeView" SelectedItemChanged="FileExplorerTreeView_SelectedItemChanged"> 
         <TreeView.ItemTemplate> 
          <HierarchicalDataTemplate DataType="{x:Type local:DataItem}" ItemsSource="{Binding Folders}"> 
           <DockPanel> 
            <TextBlock Name="CaptionTextblock" Text="{Binding Title}" DockPanel.Dock="Right"/> 
            <Image Source="{Binding Icon, Converter={StaticResource EmptyImageToImageSourceConverter}}" RenderOptions.BitmapScalingMode= "HighQuality" Stretch="Uniform" Height="{Binding ElementName=CaptionTextblock,Path=ActualHeight}" DockPanel.Dock="Left"/> 
           </DockPanel> 
          </HierarchicalDataTemplate> 
         </TreeView.ItemTemplate> 
        </TreeView> 

        <ListView x:Name="FileExplorerListView" Grid.Column="1" Margin="4,0,0,0" ItemsSource= "{Binding}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
          SelectedItem="{Binding DataItem, RelativeSource={RelativeSource AncestorType=Window}}" SelectionChanged="FileExplorerListView_SelectionChanged"> 
         <ListView.ItemsPanel> 
          <ItemsPanelTemplate> 
           <WrapPanel/> 
          </ItemsPanelTemplate> 
         </ListView.ItemsPanel> 

         <ListView.ItemTemplate> 
          <DataTemplate> 
           <DockPanel> 
            <TextBlock DockPanel.Dock="Bottom" Text="{Binding Title}"/> 
            <Image Source="{Binding Icon, Converter={StaticResource EmptyImageToImageSourceConverter}}" Width="32" Height="32" DockPanel.Dock="Top"/> 
           </DockPanel> 
          </DataTemplate> 
         </ListView.ItemTemplate> 
        </ListView> 
+3

可能な複製:http://stackoverflow.com/questions/413890/how-to-programmatically-select-an-item-in-a-wpf-treeview –

+0

私は既にそこにあった複数の回答を試しました。うまくいかず、私はその人の誰かを誰がやるのか分からなかった。 – infoservice

答えて

0

が、それは仕事のアイテムのセッターを得ましたTreeviewのアイテム自体がツリービューに表示されていなかったため(親が崩壊した)、inotifypropertychangedインターフェースを実装しなかったので、アイテムを変更すると、親がすべて消費されるそのためにプロジェクトの半分をやり直す必要がありました) inotifypropertychangedインターフェイスが完成しました。今は魅力的なものです。

関連する問題