namespace Binding.ListBox
{
//GUI
public partial class MainWindow : Window
{
public Group TheGroup { get; set; }
public struct StructContext
{
public List<User> ListUserFull { get; set; }
}
public MainWindow()
{
InitializeComponent();
var context = new StructContext() { ListUserFull = new Business().UserGetAll() };
TheGroup = new Business().GetOneGroup();
TheGroup.Users = TheGroup.Users.Select(oneUser => context.ListUserFull.FirstOrDefault(u => u.Id == oneUser.Id)).ToList();
DataContext = context;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if(TheGroup!=null && TheGroup.Users!=null)
Console.WriteLine("Il y a "+TheGroup.Users.Count+" utilisateurs selectionnés");
else
Console.WriteLine("Il n'y a aucun utilisateur selectionné");
}
}
//BLL
public class Business
{
public List<User> UserGetAll()
{
return new List<User>{
new User(1, "DUPOND", "Martin"),
new User(2, "DURAND", "François"),
new User(3, "MACHIN", "Marc"),
new User(4, "GILLES", "Franck")
};
}
public Group GetOneGroup()
{
return new Group{
Users = new List<User>{
new User(1, "DUPOND", "Martin"),
new User(2, "DURAND", "François")
}
};
}
}
//ENTITY
public class Group
{
public List<User> Users { get; set; }
}
public class User
{
public User(long id, string lastname, string firstname)
{
Id = id;
Lastname = lastname;
Firstname = firstname;
}
public long Id { get; set; }
public string Lastname { get; set; }
public string Firstname { get; set; }
}
//BEHAVIOR
public static class ListBoxSelectedItems
{
public static void SetSelectedItems(System.Windows.Controls.ListBox listbox, IList list) { listbox.SetValue(SelectedItemsProperty, list); }
public static IList GetSelectedItems(System.Windows.Controls.ListBox listbox) { return listbox.GetValue(SelectedItemsProperty) as IList; }
public static DependencyProperty SelectedItemsProperty = DependencyProperty.RegisterAttached("SelectedItems", typeof(IList), typeof(ListBoxSelectedItems), new PropertyMetadata(null, new PropertyChangedCallback(SelectedItemsProperty_Changed)));
private static void SelectedItemsProperty_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (!(d is System.Windows.Controls.ListBox) || !(e.NewValue is IList)) return;
((System.Windows.Controls.ListBox)d).SelectedItems.Clear();
foreach (var oneValue in ((IList)e.NewValue))
((System.Windows.Controls.ListBox)d).SelectedItems.Add(oneValue);
((System.Windows.Controls.ListBox)d).SelectionChanged += ListBox_SelectionChanged;
}
private static void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!(sender is System.Windows.Controls.ListBox)) return;
}
}
}
A ce niveau là:
1) Lorsque je charge ma page j'ai bien les deux premiers items de selectionnés
2) Lorsque je clique sur le bouton, il y a bien deux items.
3) Si je sélectionne 3 items et que je clique sur le bouton il ne connait que les deux premiers.
Je modifie donc la méthode SelectionChanged
private static void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!(sender is System.Windows.Controls.ListBox)) return;
var theListbox = sender as System.Windows.Controls.ListBox;
SetSelectedItems(theListbox, theListbox.SelectedItems);
}
A ce niveau là:
1) IDEM
2) IDEM
3) Si je sélectionne 3 items et que je clique sur le bouton, j'obtiens la valeur null.
Je ne comprend pas pourquoi. Quelqu’un a t'il une idée?
ListBox theListbox = sender as ListBox;
MessageBox.Show(theListbox.SelectedItems.Count.ToString());
Binding sur les SelectedItems d'une ListBox ne fonctionne pa
× 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.