Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bind les "SelectedItems" d'un Listbox

    22 mars 2019 à 11:58:52

    Bonjour, et d'avance merci du temps que vous voudrez bien me consacrer!

    J'ai un listbox_2 qui contient une liste de fruits et légumes ;)

    J'ai un autre listbox_1 qui peut contenir un groupe de fruits et légumes et une recette

    Je voudrais qu'a chaque sélection d'un groupe (dans listbox_1) , l'on voit les fruits et légumes correspondants sélectionnés (dans listbox_2)
    ...et que cette sélection puisse être modifiée et mémorisée

    Malheureusement, tout cela reste très obscure pour moi...pourriez-vous m'aider à y voir plus clair!?

    Voici le code jusqu'à présent:

    C#

    public partial class MainWindow : Window
        {
            ItemList il;
            GroupList gl;
    
            public MainWindow()
            {
                InitializeComponent();
            }
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                il = new ItemList();
                ICollectionView cvs = CollectionViewSource.GetDefaultView(il);
                cvs.SortDescriptions.Add(new SortDescription("_type", ListSortDirection.Ascending));
                cvs.SortDescriptions.Add(new SortDescription("_name", ListSortDirection.Ascending));
                cvs.GroupDescriptions.Add(new PropertyGroupDescription("_type"));
                ListBox2.ItemsSource = cvs;
    
                gl = new GroupList();
                ICollectionView cvt = CollectionViewSource.GetDefaultView(gl);
                ListBox1.ItemsSource = cvt;
            } 
        }
    
        public class Item
        {
            public string _type { get; set; }
            public string _name { get; set; }
            public Item()
            {
            }
        }
        public class ItemList : ObservableCollection<Item> {
            public ItemList() {
                base.Add(new Item() { _type = "fruit", _name = "apple" });
                base.Add(new Item() { _type = "vegetable", _name = "potato" });
                base.Add(new Item() { _type = "fruit", _name = "banana" });
                base.Add(new Item() { _type = "vegetable", _name = "tomato" });
                base.Add(new Item() { _type = "fruit", _name = "pear" });
                base.Add(new Item() { _type = "vegetable", _name = "salad" });
                base.Add(new Item() { _type = "fruit", _name = "orange" });
                base.Add(new Item() { _type = "vegetable", _name = "onion" }); 
            }
        }
    
        public class Group
        {
            public string _groupname { get; set; }
            public List<String> _members { get; set; }
            public string _recipe { get; set; }
            public Group()
            {
            }
        }
        public class GroupList : ObservableCollection<Group>
        {
            public GroupList()
            {
                base.Add(new Group() { _groupname = "Group_1", _members = new List<String>() { "apple", "salad" }, _recipe = "Do this and do that" });
                base.Add(new Group() { _groupname = "Group_2", _members = new List<String>() { "banana", "onion" }, _recipe = "Don't do that and do this" });
            }
        }

    XAML

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525"
            Loaded="Window_Loaded">
        <Grid>
            <Label Margin="12,0,378,283" Content="Group"></Label>
            <Label Margin="190,0,200,283" Content="Members"></Label>
            <Label Margin="309,0,81,283" Content="Recipe"></Label>
            <TextBox Margin="309,34,12,12" DataContext="{Binding SelectedItem, ElementName=ListBox1}" Text="{Binding Path=_recipe, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>
            <ListBox Margin="12,34,378,12" Name="ListBox1" SelectionMode="Single">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding _groupname}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
            <ListBox Margin="190,34,199,12" Name="ListBox2" SelectionMode="Multiple" SelectedValuePath="_name">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding _name}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
                <ListBox.GroupStyle>
                    <GroupStyle>
                        <GroupStyle.ContainerStyle>
                            <Style TargetType="{x:Type GroupItem}">
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate>
                                            <Expander Header="{Binding Name}" IsExpanded="True">
                                                <ItemsPresenter />
                                            </Expander>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </GroupStyle.ContainerStyle>
                    </GroupStyle>
                </ListBox.GroupStyle>
            </ListBox>
        </Grid>
    </Window>




    • Partager sur Facebook
    • Partager sur Twitter

    Bind les "SelectedItems" d'un Listbox

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown