SilverLight 4 DataGrid & MVVM: Използване на SelectionChanged тригер за отметка в квадратчето, но NotifyPropertyChanged причинява срив

Имам DataGridCheckBoxColumn в моя DataGrid, който трябва да посочи редовете, които потребителят е избрал. Искам квадратчетата за отметка да бъдат отметнати/премахнати с едно кликване. Правенето на колоната редактируема (т.е. IsReadOnly="False") означава, че потребителят трябва да щракне два пъти (първото щракване просто избира реда, второто щракване променя квадратчето за отметка), така че реших да задам/изчистя свойството, към което е обвързана колоната в вижте кода на модела в отговор на задействането на тригера SelectionChanged.

Задаването/изчистването на свойството работи добре, но веднага щом извикам NotifyPropertyChanged("име на колекцията, към която е обвързана мрежата"), за да получа изгледа, за да покаже промяната, това кара тригера SelectionChanged да се задейства отново. Това се повтаря около 10 пъти, докато не бъде хвърлено изключение.

Ако премахна извикването към NotifyPropertyChanged, тригерът SelectionChanged се задейства веднъж, но, разбира се, не виждам никаква промяна в потребителския интерфейс. Колекцията е PagedCollectionView, ако това има значение.

Как мога да накарам това да работи? Забележка - използвам MVVM модел, така че всичко се прави с обвързвания към View Model (без код зад).

Благодаря


person Laurence    schedule 04.03.2011    source източник


Отговори (2)


Звучи сякаш имате безкраен цикъл по дизайн.

но опитайте да използвате selectionchanging вместо selectionchanged,

или поставете флаг за isloading във вашия изгледмодел и не извиквайте inotify, ако isloading е вярно

person Cowboy    schedule 06.03.2011
comment
За съжаление няма променен тригер за избор. - person Laurence; 09.03.2011

Намерих много просто решение, което не включва тригери или код зад него. Вижте: Колони DataGrid с квадратче за отметка с едно щракване на Silverlight

Изглежда, че работи, като използва шаблон на колона, но предоставя само CellEditingTemplate и не CellTemplate.

person Laurence    schedule 09.03.2011