Получить выбранные значения из списка привязки - PullRequest
0 голосов
/ 09 июля 2019

Связывание ListBox внутри TabControl может быть немного сложным. TabControl также связан и ListBox связан в нем. Может быть найдено значение заголовка TabControl, но с тех пор значение, выбранное в ListBox, не было получено.

Main.xaml.cs

AddTab at = (AddTab)scenarioTC.SelectedItem;
MessageBox.Show(at.Header);
//listbox selecteditem show by Console or MessageBox

class AddTab
{
    public string Header { get; set; }
    public string Time { get; set; }
    public ObservableCollection<AddData> Data { get; } = new ObservableCollection<AddData>();
}

class AddData
{
    public string Name { get; set; }
    public string Path { get; set; }
}

Main.xaml

<TabControl x:Name="scenarioTC" ItemsSource="{Binding}" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5,0,5,5"  VerticalAlignment="Stretch" SelectionChanged="ScenarioCB_SelectionChanged" KeyDown="ScenarioTC_KeyDown">
            <TabControl.ItemTemplate>
                <DataTemplate DataType="local:AddTab">
                    <TextBlock Text="{Binding Header}"/>
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate DataType="local:AddTab">
                    <ListBox x:Name="listBox" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" ItemsSource="{Binding Data}" AllowDrop="True" Drop="ListBox_Drop" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Visible" Padding="0">
                        <ListBox.ItemsPanel>
                            <ItemsPanelTemplate>
                                <WrapPanel IsItemsHost="True"/>
                            </ItemsPanelTemplate>
                        </ListBox.ItemsPanel>
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Vertical">
                                    <Image x:Name ="VD" Margin="3" Source="{Binding Path}" Height="180" Stretch="Uniform" HorizontalAlignment="Center"/>
                                    <TextBlock Name="TB" Margin="3" Text="{Binding Name}"/>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </DataTemplate>
            </TabControl.ContentTemplate>
        </TabControl>

1 Ответ

0 голосов
/ 09 июля 2019

Mathod 1. Попробуйте добавить свойство Listbox SelectedIndex в AddTab и Binding в xaml DataTemplate.

Метод 2:

ListBoxItem listBoxItem= scenarioTC.ItemContainerGenerator.ContainerFromItem(scenarioTC.SelectedItem) as ListBoxItem;
Border border = VisualTreeHelper.GetChild(listBoxItem,0) as Border;
ListBox listBox = VisualTreeHelper.GetChild(border.Child,0);
var selectedItem = listbox.SelectedItem;

Код не был проверен, но может работать.

...