Trouble binding LongListSelector.SelectedItem to MVVM property

前端 未结 2 917
遥遥无期
遥遥无期 2021-01-28 23:57

Using Visual Studio 2013 and the Window Phone 8 SDK I cannot get the SelectedItem property of the LongListSelector to properly bind to an MVVM property

相关标签:
2条回答
  • 2021-01-29 00:34

    To get the item that was selected to the ViewModel, I'm always using a LongListSelector Extension - the code can be found here: https://gist.github.com/Depechie/7524630

    What you need to do is add it to the XAML of your LongListSelector:

    <phone:LongListSelector x:Name="List" ext:LongListSelectorExtension.Command="{Binding *YOURVIEWMODELCOMMAND*}" />
    

    The command on the viewmodel will receive the object type of your item source on the LongListSelector

    0 讨论(0)
  • 2021-01-29 00:41

    Use 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;
        }
    

    And 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>
    
    0 讨论(0)
提交回复
热议问题