3

LongListSelector にいくつかの CheckBox をバインドしようとしています。それらはバインドされ、ビューがレンダリングされるときに正しい CheckBoxes がチェック/チェック解除されますが、CheckBoxes をチェック/チェック解除して基になるオブジェクトを変更することはできません。

<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 イベントをサブスクライブしようとしましたが、発生しません。

コード ビハインドで Checked と Unchecked をいつでも処理できましたが、ビューモデルですべてを処理したくありませんでした。

バインディングを適切に機能させる方法についてのご意見をお待ちしております。

4

1 に答える 1