2012-01-09 179 views
1

父對象我有一個hierarcial類這樣綁定到在XAML

Part 
    SubPart 
    SubSubPart1 
    SubSubPart2 

我有一個由SubSubPart並且在控制我想顯示對父母分部和部分信息填充控制。我想在xaml中使用普通綁定來顯示關於父部件的信息。

每個零件都有一個唯一的ObjectId作爲屬性,每個零件都有多個屬性,我想要顯示。

控件只知道一個sububpart。

我意識到,我可以寫一個轉換器

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

不要SubSubPart對象有父分部對象的引用控件的DataContext的?如果他們這樣做,你可以使用像Path = MySubPart.ParentPart.Name。 – 2012-01-09 14:32:17

回答

2

綁定使用轉換器和更新您的轉換器只返回父零件

<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding ObjectId}" DataContext="{Binding Converter={StaticResource partConverter}}" Margin="0,0,10,0" /> 
+0

優秀。這是最終版本 klashagelqvist 2012-01-09 14:43:24

4

您可以通過使用RelativeSource綁定的FindAncestor模式來執行要查找的操作。

例如TextBlock的Text屬性將是以下幾點:

Text="{Binding Path=ObjectId, RelativeSource={RelativeSource FindAncestor, 
    AncestorType={x:Type local:SubPart}, AncestorLevel=1} 

其中local將被宣佈爲其中類SubPart聲明的命名空間。

您可以按照Part類的相同模式,根據需要更改AncestorTypeAncestorLevel屬性。

+4

+1雖然如果在SubPart的DataContext上存在ObjectId而不是SubPart上的屬性,那麼您需要綁定到DataContext.ObjectId – Rachel 2012-01-09 14:14:04

+0

感謝您的回答。對不起,如果我的解釋不夠好。子部件不控制其視圖模型內部的數據結構,該控件綁定到控件並且控件只知道一個子部件。 – klashagelqvist 2012-01-09 14:17:55