使用 Visual Studio 2013 和 Window Phone 8 SDK,我无法获取LongListSelector
的 SelectedItem
属性以正确绑定到 MVVM 属性。
这似乎与控件中存在的问题相同,该错误在包含在 SDK 中之前存在,但标记为已修复。 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 中:
<phone:LongListSelector x:Name="List" ext:LongListSelectorExtension.Command="{Binding *YOURVIEWMODELCOMMAND*}" />
视图模型上的命令将在 LongListSelector 上接收项目源的对象类型
使用 bahavior
public class LongListSelectedItemBehavior : Behavior<LongListSelector>
{
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
<phone:LongListSelector Margin="0,0,-22,0"
ItemsSource="{Binding Items}">
<i:Interaction.Behaviors>
<local:LongListSelectedItemBehavior SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
</i:Interaction.Behaviors>
</phone:LongListSelector>