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

Signaler
Messages postés
66
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
26 mars 2019
-
Messages postés
14881
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
3 juin 2020
-
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>

3 réponses

Messages postés
14881
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
3 juin 2020
413
Bonsoir

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

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

--
Messages postés
14881
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
3 juin 2020
413
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.