这是我的代码:(我之后解释我的问题)
<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;。
答案 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}}"