2013-04-14 2 views
3

Я пытаюсь связать некоторые CheckBoxes в LongListSelector. Они связываются, и правильные CheckBoxes проверяются/не проверены при визуализации представления, но я не могу изменить свой базовый объект, установив/сняв флажок CheckBoxes.Связать CheckBoxes с LongListSelector

<Grid Grid.Row="3"> 
<phone:LongListSelector ItemsSource="{Binding PlaceOfInterestCategories}"> 
    <phone:LongListSelector.ItemTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" Content="{Binding Name}"/> 
     </DataTemplate> 
    </phone:LongListSelector.ItemTemplate> 
</phone:LongListSelector>  

Мой ViewModel имеет следующий код в нем:

private ObservableCollection<PlaceOfInterestCategory> _placeOfInterestCategories; 

public ObservableCollection<PlaceOfInterestCategory> PlaceOfInterestCategories 
{ 
    get { return _placeOfInterestCategories; } 
    set 
    { 
     if (_placeOfInterestCategories != value) 
     { 
      _placeOfInterestCategories = value; 

      OnPropertyChanged(); 
     } 
    } 
} 

public event PropertyChangedEventHandler PropertyChanged; 

[NotifyPropertyChangedInvocator] 
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
{ 
    var handler = PropertyChanged; 
    if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
} 

-

[DataContract] 
public class PlaceOfInterestCategory 
{ 
    [DataMember] 
    public int Id { get; set; } 

    [DataMember] 
    public string Name { get; set; } 

    [DataMember] 
    public bool IsSelected { get; set; } 
} 

Я попытался подписаться на событие CollectionChanged, но это не является уволена.

Я мог бы всегда обрабатывать Проверено и снято в моем коде, но я бы предпочел и не обрабатывал все в моей модели просмотра.

Я бы очень признателен за любые данные о том, как я могу заставить связывание работать правильно.

+0

Можете ли вы разместить свой класс PlaceOfInterestCategory? – Marc

+0

Нет необходимости добавлять теги в свой заголовок, для этого есть система тегов. Пожалуйста, прочитайте http://meta.stackexchange.com/q/19190 для обсуждения. Точно так же «Спасибо» уже «покрыты» из-за вашей карты персонажей в правом нижнем углу, так что это тоже не нужно. – Patrick

ответ

1

Сделать PlaceOfInterestCategory реализовать INotifyPropertyИзменить и вызвать OnPropertyChanged() в настройщиках свойств. Поскольку вы привязываетесь к элементам наблюдаемой коллекции i вашего вида, которые являются PlaceOfInterestCategory, они должны реализовать INPC. Пробовали ли вы установить контрольную точку в сеттерах, чтобы проверить, действительно ли свойства обновляются при проверке ваших флажков? Не установлены ли они или изменения не отражаются в пользовательском интерфейсе?

+0

Спасибо большое! У меня создалось впечатление, что ObservableCollection обрабатывает INPC для меня, но это применимо только к простым типам, что в ретроспективе имеет смысл. – Francis

Смежные вопросы