jeudi 4 novembre 2021

Binding checkbox ischecked inside listbox(WPF)

I'm trying to bind checkbox ischecked value. but whenever I click multiple checkbox, only last item is get selected.

This is my xaml.

<ListBox x:Name="EntryBox" ItemsSource="{Binding SourceCollection}" SelectedItem="{Binding SelectedCheckbox}" SelectionMode="Multiple" Grid.Column="0" Grid.Row="0" >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <ListBoxItem IsSelected="{Binding Selected}">
                                <StackPanel  Orientation="Horizontal">
                                    <CheckBox IsChecked="{Binding Selected}"/>
                                    
                                </StackPanel>
                            </ListBoxItem>
  
                        </DataTemplate>
       </ListBox.ItemTemplate>
</ListBox>

My viewmodel

 public class MytViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private ObservableCollection<Item> _socketEntryCollection;
       

        public MyViewModel()
        {
            _socketEntryCollection = new ObservableCollection<Item>();
        }

private ListCollectionView _sourceCollection;
        public ListCollectionView SourceCollection
        {
            get { return _sourceCollection; }
            set
            {
                _sourceCollection = value;
                NotifyPropertyChanged(nameof(SourceCollection));
            }
        }

private Item _selectedCheckbox;
        public Item SelectedCheckbox
        {
            get
            {
                return _selectedCheckbox;
            }
            set
            {
                _selectedCheckbox = value;
                NotifyPropertyChanged(nameof(SelectedCheckbox));
            }
        }

public class Item : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;

            
            private bool _selected;
      
            public Item()
            {
                _selected = false;
            }

            public bool Selected
            {
                get { return _selected; }
                set
                {   
                    if(_selected != value)
                    {
                        _selected = value;
                        NotifyPropertyChanged(nameof(Selected));
                    }
                    
                }
            }
private void NotifyPropertyChanged(string Obj)
            {
                if (PropertyChanged != null)
                {
                    this.PropertyChanged(this, new PropertyChangedEventArgs(Obj));
                }
            }

In my code behind,

 private MyViewModel _BVM;
        public BulkTest()
        {
            InitializeComponent();
            _BVM = new MyViewModel();
        }
        foreach(MyViewModel.Item i in _BVM.SourceCollection)
         {
                
                if (i.Selected)
                {
                   
                    
                }
            }

When I try to retrieve selected items, it only gives me only the last item I checked even though I checked multiple.

I would like to get every item that I checked. How can I do that?




Aucun commentaire:

Enregistrer un commentaire