我有一个从这样的类创建的对象层次结构:
public class MyTreeItem
{
public MyTreeItem Parent{get;set}
public IList<MyTreeItem> Children{get;set;}
public string Description{get;set;}
//Other properties.
}
假设我有一个MyTreeItem
的对象树,例如以下内容:
A
/
B C
/
D E F
在我的程序中,我将从DB查询中以上层次结构中获取一些对象。该项目将属于树的第二或第三级(在这种情况下为B, C, D, E or F
)。我想使用Parent
属性显示获得对象的完整树路径(就像Windows Explorer中显示的路径一样)。假设我选择了项目B
,然后应将路径显示为A -> B
。如果选择E
,则该路径应为A -> B -> E
。有没有办法在XAML?
因此,如果您想将其显示为字符串,那么您需要做的就是设计一个属性,该属性是根据父的返回面包屑步道...
注意:这假设" A"one_answers" 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
(应为最高级别)p>例如,对于节点E,它将建立面包屑:
循环0:e
循环1:b-> e
循环2:a-> b-> e
如何使用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}}"/>