How to Bind CheckListBox with Command Property to Get Checked ItemList

Jul 31 2021 1:06 PM

My XMAL as below

<xctk:CheckListBox x:Name="SiteCheckList" Margin="0,0,512,0" Height="100" Width="150"
                               ItemsSource="{Binding SiteList}"
                               DisplayMemberPath="SiteName"
                               CheckedMemberPath="IsChecked"
                               Command="{Binding Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
            </xctk:CheckListBox>

 

Model

private string _SiteName;

        public string SiteName
        {
            get { return _SiteName; }
            set { _SiteName = value; }
        }

        private bool _IsChecked;

        public bool IsChecked
        {
            get { return _IsChecked; }
            set { _IsChecked = value; }
        }

ViewModel

private ObservableCollection<HistoricalDataModel> _SiteList;

        public ObservableCollection<HistoricalDataModel> SiteList
        {
            get { return _SiteList; }
            set { _SiteList = value; }
        }

        private bool _IsChecked;

        public bool IsChecked
        {
            get { return _IsChecked; }
            set
            {
                if (_IsChecked !=value)
                {
                    _IsChecked = value;
                }
                OnPropertyChanged(nameof(IsChecked));
            }
        }

        public HistoricalDataViewModel()
        {
            SiteList = new ObservableCollection<HistoricalDataModel>();
            PoppulateSiteNames();
        }


        private void PoppulateSiteNames()
        {
            Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
            keyValuePairs = Files.ReadIni_KeyValue(Vars.MSSQL_Section);
            foreach (string Key in keyValuePairs.Keys)
            {
                keyValuePairs.TryGetValue(Key, out string LogTable);
                SiteList.Add(new HistoricalDataModel() { SiteName = LogTable });
            }

        }

public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string PropertyName)
        {
            if (PropertyChanged !=null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
            }
        }


Answers (1)