Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wpf-在从嵌套listview中选择项时,也选择父listview_Wpf - Fatal编程技术网

wpf-在从嵌套listview中选择项时,也选择父listview

wpf-在从嵌套listview中选择项时,也选择父listview,wpf,Wpf,我有一个包含一个文本块和另一个列表的listview。 我希望当用户单击嵌套的listviewitem时,也选择父listviewitem。 例子: 在上面的图像中,选择了Lista2(父列表项)。 用户从列表A1中单击Linia6以选择它。当从列表A1(嵌套列表项)选择Linia6时,也将选择列表A1(父列表项) 另外,如果可以在代码隐藏(而不是XAML)上执行此操作 我的代码 <ListView ItemsSource="{Binding listsToDisplay}" Scrol

我有一个包含一个文本块和另一个列表的listview。 我希望当用户单击嵌套的listviewitem时,也选择父listviewitem。 例子:

在上面的图像中,选择了Lista2(父列表项)。 用户从列表A1中单击Linia6以选择它。当从列表A1(嵌套列表项)选择Linia6时,也将选择列表A1(父列表项)

另外,如果可以在代码隐藏(而不是XAML)上执行此操作

我的代码

<ListView ItemsSource="{Binding listsToDisplay}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" Width="200">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Width="250"  Text="{Binding listName}"></TextBlock>
                        <ListView ItemsSource="{Binding listContent}">
                        </ListView>
                    </StackPanel>

                </DataTemplate>
            </ListView.ItemTemplate>

如果嵌套的
ListView
SelectedItem
属性未被其他方式使用,则可以使用转换器将其绑定到其父级的
ListViewItem.IsSelected
。注意,父列表视图上的
SelectionMode=“Single”
对于避免转换器的双重选择非常重要

<Grid x:Name="grid1">
    <Grid.Resources>
        <local:SelectedItemTransferConverter x:Key="ItemSelectedConverter"/>
    </Grid.Resources>
    <ListView ItemsSource="{Binding listsToDisplay}" SelectionMode="Single">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding listName}"/>
                    <ListView
                        ItemsSource="{Binding listContent}"
                        SelectedItem="{Binding IsSelected,RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}},Converter={StaticResource ItemSelectedConverter}}"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

您能否描述有关所需选择行为的更多详细信息?从你的图片上看,它似乎是
Lista1.Linia6
最后被选中,但你写它时也应该选择
Lista2
,所以我真的不明白你想要什么。对文章进行了编辑并添加了以下信息:在上面的图片中,Lista2(父列表项)被选中。用户从列表A1中单击Linia6以选择它。当从列表A1(嵌套列表项)中选择Linia6时,也要选择列表A1(父列表项)。是否应取消选择
Lista2.Linia4
(基本上,在所有嵌套列表中只有一个选择)?没有考虑这一部分,虽然这是一个很好的实践,对我来说也很有趣,但我知道如何做好这一点,您应该考虑将
TreeView
hierarchycaldatatemplate
一起使用,而不是嵌套的
ListView
public class SelectedItemTransferConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is bool || value is bool?)
        {
            if ((bool?)value == false)
            {
                return null;
            }
        }
        return Binding.DoNothing;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (targetType == typeof(bool) || targetType == typeof(bool?))
        {
            return value != null;
        }
        return Binding.DoNothing;
    }
}