2012-06-07 63 views
0

我有一個WPF樹視圖,我需要父節點在子節點上下文中的引用。 菜單命令。在下面的XAML,我需要通過在成員的命令參數A的參考傳遞父參考的命令參數

XAML:

<DataTemplate x:Key="Member"> 
<TextBlock Text="{Binding}" Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType=mylib:ExtendedTreeView}}"> 
    <TextBlock.ContextMenu> 
    <ContextMenu> 
    <MenuItem Header="Delete" Command="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.Tag.DeleteMmeberCommand}"> 
    <MenuItem.CommandParameter> 
     <MultiBinding Converter="{StaticResource MutilValueConverter}"> 
     <Binding Path=".."/> 
     <Binding /> 
     </MultiBinding> 
    </MenuItem.CommandParameter> 
    </MenuItem> 
    </ContextMenu> 
    </TextBlock.ContextMenu> 
</TextBlock> 
</DataTemplate> 
<HierarchicalDataTemplate DataType="{x:Type A}" ItemsSource="{Binding Members}" ItemTemplate="{StaticResource Member}" 
<TextBlock Text="{Binding"}> 
    <TextBlock.ContextMenu> 
    <ContextMenu> 
    <MenuItem Header="Delete" Command="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.Tag.DeleteACommand}" CommandParameter="{Binding}"/> 
    </ContextMenu> 
    </TextBlock.ContextMenu> 
</TextBlock> 
</HierarchicalDataTemplate> 


<TreeView ItemsSource="{Binding As}"/> 

轉換器:

public class MutilValueConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     return values; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

回答

0

如果我理解正確的,你可能反轉整個東西:

在什麼是你的datacontext中發佈你的命令,並給你的subdatacontext的實例 作爲命令參數(這是ju ST約束力的 您的項目)

+0

該命令已經發布在數據上下文中。基本上命令參數應該有2個項目,一個父項目是A,並且子項目被刪除是成員 – Arihant

+0

如果您有子視圖模型,讓命令由父視圖模型發佈,參數是要刪除的子項。父母就是「this」,孩子就是參數。 –

+0

孩子不是視圖模型。它是一個字符串。父母是具有字符串集合的模型對象。所以,右鍵單擊該字符串,如果將該字符串視爲視圖模型,則需要從父 – Arihant

0

您正在使用您的綁定PlacementTaregt但你還沒有設置任何地方ContextMenu.PlacementTarget ...

<TextBlock Text="{Binding"} x:Name="MyTextBox"> 
    <TextBlock.ContextMenu> 
     <ContextMenu PlacementTarget="{Binding ElementName=MyTextBox}"> 
     ..... 
+0

已經在文本框中定義了標籤:> – Arihant

+0

該標籤如何解析如果你的'PlacementTarget'本身沒有到位,綁定? –

0

直的辦法就是對你的成員集合持有的ViewModels。

和子視圖模型,不需要獲取綁定,因爲您可以只保存viewmodel類中所需的數據。它是模型(字符串來自哪裏)和視圖(顯示字符串的位置)之間的適配器。