我有一个从这样的类创建的对象层次结构:
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
在我的程序中,我将从数据库查询中获取上述层次结构中的某个对象。此项目将属于树的第二级或第三级(在本例中为B, C, D, E or F
)。我想使用Parent
属性显示所获取对象的完整树路径(类似于在Windows资源管理器中显示路径的方式)。假设我选择了项B
,那么路径应显示为A -> B
。如果我选择E
,则路径应为A -> B -> E
。有没有办法在XAML中完成这项工作?
答案 0 :(得分: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
(在顶层应该为空)
例如,对于Node E,它将构建如下的痕迹:
循环0:E
环1:B - &gt; Ë
循环2:A - &gt; B - &gt; ë
答案 1 :(得分: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}}"/>