0
votes

I am using a wpf treeview and binding the ItemsSource to an IEnumerable of my ViewModel that has an IsChecked Property. I am binding a checkbox to this value with a Mode of TwoWay. I can see when I step through the program that it is setting this value properly on my ViewModel when I check the checkbox.

I then have a Menu Item that "Runs Checked". In this method I have a foreach loop that runs through the ItemsSource as IEnumerable of ViewModel looking for IsChecked = true to queue up the checked items to be run by a separate program. As such:

foreach (AccountViewModel account in tvClientList.ItemsSource as IEnumerable<AccountViewModel>)
                {
                    if (account.IsChecked)
                    {
                        context.Queues.InsertOnSubmit(new Queue {Id = account.Id});
                    }
                }

However, account.IsChecked is always false. Why is this?

2

2 Answers

0
votes

i would check the following.

  1. does the setter of AccountViewModel.Ischecked is called when clicking the treeview checkbox. if no - then thats the problem if yes you should look at your collection bindings.

  2. debug your foreach and check wether the treeviewitemssource is the collection you expect.

maybe you can post your bindings, if that all no help.

ps: dont access your View controls directly if you use viewmodels/mvvm.

0
votes

Just for anyone else encountering this issue. ItemsSource returns a new set of data, Items, however contains the current set of data.