1

我有一个从这样的类创建的对象层次结构:

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

假设我有一个MyTreeItems 的对象树,如下所示:

    A
   / \
  B   C
 /\    \
D  E    F

在我的程序中,我将从数据库查询中获取上述层次结构中的一些对象。该项目将属于树的第二或第三级(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

如何使用IValueConverter并将其绑定到TextBlock文本 DP。

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 回答