将CheckBoxes绑定到LongListSelector

时间:2013-04-14 11:13:56

标签: xaml mvvm windows-phone-8 2-way-object-databinding

我正在尝试在LongListSelector中绑定一些CheckBoxes。它们绑定,并且在呈现视图时检查/取消选中正确的CheckBox,但是我无法通过选中/取消选中CheckBox来修改我的底层对象。

<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,但我不愿意,并处理我的viewmodel中的所有内容。

我非常感谢有关如何使绑定正常工作的任何意见。

1 个答案:

答案 0 :(得分:1)

使PlaceOfInterestCategory实现INotifyPropertyChange并在属性设置器中调用OnPropertyChanged()。当您绑定到您的视图的可观察集合项目(即PlaceOfInterestCategory)时,它们应该实现INPC。您是否尝试在setter中设置断点,以便在选中复选框时查看属性是否实际更新?它们没有被设置,或者您的UI中没有反映出更改?