1

次のようなクラスから作成されたオブジェクト階層があります。

public class MyTreeItem
{
    public MyTreeItem Parent{get;set}
    public IList<MyTreeItem> Children{get;set;}
    public string Description{get;set;}
    //Other properties.
}

MyTreeItem次のような s のオブジェクト ツリーがあるとします。

    A
   / \
  B   C
 /\    \
D  E    F

私のプログラムでは、DB クエリから上記の階層にあるオブジェクトを取得します。このアイテムは、ツリーの 2 番目または 3 番目のレベルに属します (B, C, D, E or Fこの場合)。プロパティを使用して、取得したオブジェクトのフル ツリー パスを表示したいParent(Windows エクスプローラーでのパスの表示のようなもの)。アイテムを選択したとするとB、パスは のように表示されA -> Bます。を選択した場合E、パスは になりますA -> B -> E。これを XAML で行う方法はありますか?

4

2 に答える 2

0

したがって、これを文字列として表示したい場合は、親に基づいてパンくずリストを返すプロパティを設計するだけです...

注:これは、「A」と「B」がDescriptionプロパティであることを前提としています。

public string Breadcrumb
{
    get
    {
        string breadcrumb = Description;

        if(Parent === null)
            return breadcrumb;

        for(MyTreeItem currentItem = Parent; currentItem != null ; currentItem = currentItem.Parent)
        {
            breadcrumb = string.Format("{0) -> {1}", currentItem.Description, breadcrumb);
        }

        return breadcrumb;
    }
}

->基本的に、ロジックは、現在のブレッドクラムの前に親の説明(でフォーマットされた)を追加し続けることです。forループは、currentItemをParent(トップレベルではnullである必要があります)に設定します。

たとえば、ノードEの場合、ブレッドクラムは次のように構築されます。

ループ0:E
ループ1:B-> E
ループ2:A-> B-> E

于 2012-10-24T04:34:19.373 に答える
0

を使用して、テキスト DPIValueConverterにバインドしてみてはいかがでしょうか。TextBlock

public class MyConverter : IValueConverter
{
   public object Convert(object value, Type targetType, object parameter, 
                                      System.Globalization.CultureInfo culture)
   {
      string hierarchy = String.Empty;
      if(value != DependencyProperty.UnsetValue)
      {
         MyTreeItem item = value;
         hierarchy = value.Description;
         MyTreeItem parentItem = item.Parent;
         while(parentItem != null)
         {
            hierarchy = string.Format("{0) -> {1}", parentItem.Description, 
                                                       hierarchy);
            parentItem = parentItem.Parent;
         }
      }
      return hierarchy;
   }

   public object ConvertBack(object value, Type targetType, object parameter,
                                  System.Globalization.CultureInfo culture)
   {
      throw new NotImplementedException();
   }
}

ここにあなたのXAMLがあります -

<TextBlock Text="{Binding SelectedItem,
                          Converter={StaticResource MyConverter}}"/>
于 2012-10-24T06:18:11.820 に答える