我有一个像这样的军事课
Part
SubPart
SubSubPart1
SubSubPart2
我有一个由SubSubPart填充的控件,在该控件中我想显示有关父SubPart和Part的信息。我想在xaml中使用普通绑定来显示有关父部分的信息。
每个部分都有一个唯一的ObjectId作为属性,每个部分都有我想要显示的多个属性。
控件只知道一个子子部分。
我意识到我可以写一个转换器
public object Convert(object value, System.Type targetType, object parameter, CultureInfo culture)
{
if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
{ return "Design Part"; }
else
{
IDataService applicationService = ServiceLocator.Current.GetInstance<IDataService>();
IPartItem partItem = applicationService.GetEquipmentFromComponent(value.ToString());
return partItem.PartData.Name;
}
}
并像这样应用
<TextBlock Grid.Row="0" Grid.Column="1"
Text="{Binding Path=ObjectId,Converter={StaticResource partConverter}}" Margin="0,0,10,0">
</TextBlock>
但是我需要为父部件的每个属性编写一个转换器。那里有任何解决方案。
答案 0 :(得分:4)
您可以使用FindAncestor
绑定的RelativeSource
模式来执行您要查找的内容。
例如,TextBlock的text属性如下:
Text="{Binding Path=ObjectId, RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type local:SubPart}, AncestorLevel=1}
其中local
将被声明为声明类SubPart
的命名空间。
您可以按照Part
课程的相同模式,根据需要更改AncestorType
和AncestorLevel
属性。
答案 1 :(得分:2)
使用转换器绑定控件的DataContext并更新转换器以返回父部件
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding ObjectId}" DataContext="{Binding Converter={StaticResource partConverter}}" Margin="0,0,10,0" />