I am creating an Angular2 project and having a problem with two-way binding for a checkbox.
I have a class called listItem and List like that:
export class ListItem {
  public count: number;
  public value: string;
  public checked: boolean;
  constructor(count: number, value: string, checked: boolean) {
    this.count = count;
    this.value = value;
    this.checked = checked;
  }
}
export class MyList{
  public category: string;
  public listItem : ListItem [];
  constructor(category: string, listItem : ListItem []) {
    this.category = category;
    this.listItem = listItem ;
  }
}
and I am calling the list from Azure search which is working correctly. the problem is when I just set the value to a checkbox.
<div *ngFor="let list of myList; let listIndex = index;">
  <div *ngFor="let item of list.listItems; let itemIndex = index;">
    <input type="checkbox" [name]="list.category + item.value"
         (change)="item.checked = !item.checked"
         [ngModel]="item.checked" />
  </div
</div>
but the value is always false also onClick. I tried to use [(ngModel)] but did not work also. I also tried to make a function:
(change)="oncheck(listIndex, itemIndex)"
oncheck(listIndex: number, itemIndex: number) {
   this.myList[listIndex].listItems[itemIndex].checked =  
           !this.myList[listIndex].listItems[itemIndex].checked;
  } 
but I received this error:
Cannot assign to read-only property 'checked' of object '[object Object]'
why is that and how to fix it? thank you
 
    