WPF c#从同一datatemplate中的按钮检索列表框行的内容

Oli*_*Oli 0 c# wpf listbox datatemplate

我已经研究了一段时间并且无济于事(我已经尝试过让命令工作了但是有一些我认为我很想念的东西.对于WPF做事的方式很新,但没有帮助(但是真的喜欢我用WPF找到的东西)

我遇到与此帖相同的问题: 从DataTemplate上的按钮获取ListBox行对象

我有一个列表框,每个数据模板中有标签+ 2个按钮.单击按钮时,我不需要知道单击了哪一行.(根本没有选择该行,因此Selectedindex不在问题中).我真的很喜欢Vaccano的方法,但似乎无法让它在他给出的信息上工作(他说自己非常简短)

<ListBox x:Name="lbDirectoryTreeBox" Height="auto" Width="auto" Grid.Column="0" Grid.Row="0" Margin="10,10,5,10" ItemsSource="{Binding}" 
            MouseDoubleClick="lbDirectoryBox_MouseDoubleClick" SelectionChanged="lbDirectoryTreeBox_SelectionChanged">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">                        
                <Button x:Name="btnOpenFolder" Content="R" Width="20" Height="20" Click="btnDirectoryOpen_Click" />
                <Button x:Name="btnAddFolder" Content="R" Width="20" Height="20" Click="btnAddFolder_Click" />
                <Label Width="auto" Content="{Binding Path=Name}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

单击任一按钮后,如何获取行的selectedindex?(在c#中)

在此提前感谢您的帮助.

Ser*_*kov 5

数据模板中的按钮将从列表框项继承数据上下文,因此您可以使用以下内容:

private void btnDirectoryOpen_Click(object sender, RoutedEventArgs e)
{
    var item = ((Button) sender).DataContext;
    var itemIndex = lbDirectoryTreeBox.Items.IndexOf(item);
    // ...
}
Run Code Online (Sandbox Code Playgroud)