无法将LongListSelector.SelectedItem绑定到MVVM属性
使用Visual Studio 2013和Window Phone 8 SDK我无法获取LongListSelector
的SelectedItem
属性以正确绑定到MVVM属性。
它似乎与控件中包含的错误之前存在的错误相同,但它被标记为已修复。 http://silverlight.codeplex.com/workitem/9360
是否有其他人遇到此问题并知道修复/更新版本?
我目前正在使用解决方法背后的代码
private void LongListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e) { LongListSelector s = sender as LongListSelector; var vm = DataContext as ViewModel.MainViewModel; Debug.Assert(vm != null); vm.SelectedLegislator = s.SelectedItem; }
要获取选择到ViewModel的项目,我总是使用LongListSelector扩展 – 代码可以在这里找到: https ://gist.github.com/Depechie/7524630
你需要做的是将它添加到LongListSelector的XAML:
viewmodel上的命令将在LongListSelector上接收项源的对象类型
使用行为
public class LongListSelectedItemBehavior : Behavior { public object SelectedItem { get { return (object)GetValue(SelectedItemProperty); } set { SetValue(SelectedItemProperty, value); } } // Using a DependencyProperty as the backing store for SelectedItem. This enables animation, styling, binding, etc... public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register("SelectedItem", typeof(object), typeof(LongListSelectedItemBehavior), new PropertyMetadata(null)); protected override void OnAttached() { base.OnAttached(); if (AssociatedObject != null) { AssociatedObject.SelectionChanged += AssociatedObject_SelectionChanged; } } protected override void OnDetaching() { base.OnDetaching(); if (AssociatedObject != null) { AssociatedObject.SelectionChanged -= AssociatedObject_SelectionChanged; } } private void AssociatedObject_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { SelectedItem = AssociatedObject.SelectedItem; }
和XAML