WPF: ListBox zagnieżdżony w Item innego ListBox'a - jak usunąć zaznaczenie tego wewnetrznego

0

Mam taki ListBox jak niżej. W nadrzędnym jako Item jest element kolekcji MarszrutyZaznaczonegoArtykulu, i w tym Item'ie, jest zagnieżdżony inny ListBox z kolekcją OperacjeOryginalne.

Chciałbym uzyskać taki efekt, że w tym wewnetrznym nie bedzie można zaznaczać pojedynczych Item'ów a cały wewnetrzny ListBox "przejmie" focus elementu zaznaczonego w zewnetrznym ListBoxie.

Jak to zrobić? Chyba że niepotrzebnie brnę w wewnętrznego ListBox'a może da się to zrobić inną kontrolką?

                                 <ListBox DockPanel.Dock="Top" ItemsSource="{Binding MarszrutyZaznaczonegoArtykulu}">
                                    <ListBox.ItemTemplate>
                                        <DataTemplate>
                                            <StackPanel Orientation="Vertical">
                                                <StackPanel Orientation="Vertical">
                                                    <StackPanel Orientation="Horizontal">
                                                        <TextBlock Text="Mar." FontSize="14"/>
                                                        <TextBlock Text="{Binding NrMarszruty}" FontSize="14" FontWeight="Bold"/>
                                                    </StackPanel>
                                                    <TextBlock Text="{Binding Index}" Margin="4,0,0,0" FontSize="14" FontWeight="Bold"/>
                                                </StackPanel>
                                                <ListBox ItemsSource="{Binding OperacjeOryginalne}">
                                                    <ListBox.ItemTemplate>
                                                        <DataTemplate>
                                                            <StackPanel Orientation="Horizontal">
                                                                <TextBox Text="{Binding NrOperacji}"/>
                                                                <TextBlock Text="{Binding KodStanowiska}"/>
                                                                <Label Content="{Binding Czas_Tpz.CzasStandard}"/>
                                                            </StackPanel>
                                                        </DataTemplate>
                                                    </ListBox.ItemTemplate>
                                                </ListBox>
                                            </StackPanel>
                                        </DataTemplate>
                                    </ListBox.ItemTemplate>
                                </ListBox>

I przykład wygląda tak:
widokListBox.png

1

Jeżeli nie chcesz listbox wewnątrz i zaznaczania elementów użyj ItemsControl

    public class MainWindowViewModel
    {
        public MainWindowViewModel()
        {
            Persons = new ObservableCollection<Person>();
            Persons.Add(new Person() { Name = "Andrzej" });
            Persons.Add(new Person() { Name = "Piotr" });
        }

        public IList<Person> Persons { get; private set; }
    }
    public class Person
    {
        public Person()
        {
            Datas = new ObservableCollection<string>();
            Datas.Add("Data1");
            Datas.Add("Data2");
            Datas.Add("Data3");
            Datas.Add("Data4");
        }
        public string Name { get; set; }
        public IList<string> Datas { get; private set; }
    }
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.DataContext>
            <local:MainWindowViewModel x:Name="hViewModel"/>
        </Grid.DataContext>
        <ListBox ItemsSource="{Binding Persons}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="auto"/>
                            <ColumnDefinition Width="auto"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding Path=Name}"/>
                        <ItemsControl Grid.Column="1" ItemsSource="{Binding Path=Datas}">
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding}"/>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

screenshot-20220514031226.png

0

Super, dzięki wielkie, o to chodziło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1