与父属性WPF绑定

时间:2014-06-09 19:27:14

标签: c# wpf xaml data-binding datacontext

这是我的代码:(我之后解释我的问题)

<TreeView x:Name="playlist" Grid.Row="1" ItemsSource="{Binding Playlist}">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding file}">

                <StackPanel Orientation="Horizontal">
                    <TextBlock x:Name="Names" Text="{Binding Name}" Margin="0,0,10,0"/>
                    <Button Content="add" Command="{Binding Path=DataContext.Add_file, ElementName=playlist}"
                            CommandParameter="{Binding ElementName=Names, Path=Text}">
                    </Button>

</StackPanel>
                <HierarchicalDataTemplate.ItemTemplate>
                    <DataTemplate>
                        <TextBlock x:Name="File_name" Text="{Binding}">
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="MouseLeftButtonUp">
                                    <i:InvokeCommandAction Command="{Binding Path=DataContext.Current_playlist, ElementName=playlist}"
                                                           CommandParameter="{Binding ElementName=Name,Path=Text}">

                                    </i:InvokeCommandAction>
                                </i:EventTrigger>
                                <i:EventTrigger EventName="MouseLeftButtonUp">
                                    <i:InvokeCommandAction Command="{Binding Path=DataContext.Lecture, ElementName=playlist}"
                                                           CommandParameter="{Binding ElementName=File_name,Path=Text}"></i:InvokeCommandAction>
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                        </TextBlock>
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

好的,所以我的第一个eventtrigger不起作用。我试图发送名为&#34; Name&#34;(刚好在上面)的文本块的值。但他没有找到这个名字。所以他给我发了一个空值。

我知道这个问题来自于lign <TextBlock x:Name="File_name" Text="{Binding}"> 我正在更改我的datacontext,所以我想要在父datacontext中获取属性&#34; Text&#34;名为&#34;名称&#34;。

的texblock

1 个答案:

答案 0 :(得分:0)

为什么不使用ElementName而不是在绑定中使用ReleativeSource?使用FindAncestor获取TreeView并绑定其DataContext上的值。

Command="{Binding Path=DataContext.Current_playlist, ElementName=playlist}"

变为

Command="{Binding Path=DataContext.Current_playlist, RelativeSource={RelativeSource FindAncestor, AncestorType=TreeView}}"