与父属性WPF绑定

本文关键字:绑定 WPF 属性 | 更新日期: 2023-09-27 18:07:40

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

<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>

好的,所以我的第一个事件触发器不工作。我试图发送我的文本块名为"Name"(就在上面)的值。但是他没有找到这个名字。所以他给了我一个空值。

我知道问题是由木材引起的<TextBlock x:Name="File_name" Text="{Binding}">我正在改变我的数据上下文,所以我想在父数据上下文中获得名为"Name"的文本块的属性"Text"。

与父属性WPF绑定

与其在绑定中使用ElementName,不如使用ReleativeSource ?使用FindAncestor获得TreeView并绑定到它的DataContext上的值。

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

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