[WPF] Bind les "SelectedItems" d'un Listbox

Messages postés
66
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
26 mars 2019
- - Dernière réponse : Whismeril
Messages postés
13395
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juin 2019
- 26 mars 2019 à 19:48
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 (sous forme de texte...c'est peut-être une première erreur? Peut-être faudrait-il que ce soit des objets fruits_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>
Afficher la suite 

3 réponses

Messages postés
13395
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juin 2019
279
0
Merci
Bonsoir

où est ton problème?
  • l'affichage
  • la modification
  • l'enregistrement

Commenter la réponse de Whismeril
Messages postés
66
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
26 mars 2019
1
0
Merci
Whismeril,
Mon problème est d'enregistrer tout changement fait dans la liste des fruits/légumes..dans l'objet 'group' correspondant!

--
Commenter la réponse de Jayme65
Messages postés
13395
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juin 2019
279
0
Merci
J'ai testé ton code, et pour le moment, je ne comprends pas ce que tu veux dire par
d'enregistrer tout changement fait dans la liste des fruits/légumes..dans l'objet 'group' correspondant!

Ou en tout cas ce que j'en comprends n'est pas envisageable dans le code actuel, puisqu'il n'est pas possible de changer quoique ce soit.
Commenter la réponse de Whismeril