简体   繁体   中英

Getting Listbox.SelectedItems

So if I have a collection of variables which have been assigned data and binded to the listbox item template, how can I get the collection of data based on the selection of the listbox item?

<ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Vertical" Height="500">
                    <Image Source="{Binding img }" Width="853" Height="480" VerticalAlignment="Top" Margin="0,10,8,0"/>
                    <StackPanel Width="370">
                        <TextBlock Text="{Binding text}" Foreground="#FFC8AB14" FontSize="28" />
                        <TextBlock Text="{Binding text2}" TextWrapping="Wrap" FontSize="24" />
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>

C#:

 public class collection
    {
        public string text { get; set; }
        public string img { get; set; }
        public string text2 { get; set; }
    }

    private void ListBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
       ListBox1.SelectedItems
        //how do you get the selected data in the img, text, text2 on selection?
    }

Since you are binding your collection class in the ListBox, I presume that is done somewhere in the lying viewmodel on the back. The best approach then would always be to check for ListBox1.SelectedIndex and you can definitely bind it in your viewmodel too so you dont have to really access it on your codebehind. On that case you can definitely use a event to command or something like that to bind the SelectionChanged event back to the viewmodel.

If you do prefer to use the codebehind like the example you gave just check out ListBox1.SelectedIndex for single selection strategy and ListBox1.SelectedItems for multiple selection strategies.

Kindly have a look on this or this for more details on the context here. :)

You need to cast your data. eg using LINQ

var items = ListBox1.SelectedItems.Cast<collection>();

Then you can iterate over them using foreach or the like, or access specific items, eg

var text1 = items.First().text;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM