Установите флажок = выбрана строка listviewitem

Я разрабатываю приложение UWP. У меня есть список, в котором элемент списка имеет флажок и содержимое. Что мне нужно реализовать, так это то, что когда я устанавливаю флажок, выбирается соответствующий элемент списка; когда я снимаю флажок, соответствующий элемент списка не выбран. Моему списку нужна поддержка множественного выбора. Вот мой xmal-код:

<ListView Grid.Row="1" x:Name="SuggestListView" ItemsSource="{Binding SuggestList}" IsMultiSelectCheckBoxEnabled="True"  IsItemClickEnabled="True" SelectionChanged="SuggestListView_SelectionChanged">
   <ListView.ItemTemplate>
      <DataTemplate>
         <StackPanel Orientation="Horizontal">
            <ctl:PersonUserControl HorizontalAlignment="Left"/>
            <CheckBox Name="CheckBoxhhh" HorizontalAlignment="Right" IsChecked="{Binding IsSelected, Mode=TwoWay}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
         </StackPanel>
      </DataTemplate>
   </ListView.ItemTemplate>
   <Interactivity:Interaction.Behaviors>
       <Core:EventTriggerBehavior EventName="SelectionChanged">
           <Core:InvokeCommandAction Command="{Binding SelectSuggestPersonCommand}"/>
       </Core:EventTriggerBehavior>
   </Interactivity:Interaction.Behaviors>
</ListView>

Кто-нибудь может бросить мне немного света?


person yuxhu    schedule 14.12.2015    source источник
comment
Вам известно о SelectionMode = Multiple?   -  person Romasz    schedule 14.12.2015
comment
@Romasz, спасибо за комментарии. Как я могу использовать это свойство для решения этой проблемы? Можете ли вы поделиться более подробной информацией?   -  person yuxhu    schedule 14.12.2015
comment
И в чем проблема? а зачем вам управлять всеми событиями? с привязкой в ​​Mode Two way недостаточно для обработки изменений?   -  person Juan Pablo Garcia Coello    schedule 14.12.2015
comment
ListVIew имеет режим множественного выбора по умолчанию — если вы установите SelectionMode=Multiple, вам не нужны дополнительные флажки, события и т. д. Единственная разница будет заключаться в том, что дизайн по умолчанию состоит в том, что флажок находится слева, но я думаю, что вы должны иметь возможность редактировать стиль элемента для этого.   -  person Romasz    schedule 14.12.2015
comment
@JuanPabloGarciaCoello, когда выбран элемент списка, мне нужно показать выбранный элемент в другом списке. Есть 2 случая пользователя: 1. При выборе элемента списка, соответствующий флажок установлен. Это легко реализовать, привязав флажок IsChecked of к свойству IsSelected ViewModel. 2. Когда пользователь устанавливает флажок, соответствующий элемент должен быть выбран. Как выбрать элемент (и показать его в другом списке), когда флажок установлен?   -  person yuxhu    schedule 14.12.2015
comment
Где вы хотите получить доступ к другому списку из модели представления или это просто список просмотра?   -  person Juan Pablo Garcia Coello    schedule 14.12.2015


Ответы (1)


Вы на правильном пути, но если вы хотите использовать это с IsMultiSelectCheckBoxEnabled, установленным в true, вам не нужно реализовывать свой собственный флажок в ItemTemplate.

Из того, что я понял из ваших комментариев по этому вопросу, вы ищете способ получить элементы из одной коллекции в другую, когда вы выбираете из другой.

Поэтому снимите флажок, а также добавьте SelectionMode="Multiple" в свой ListView.

В поведении вашего ListView вы прослушиваете SelectionChanged, поэтому удалите это из своего ListView, и это должно выглядеть так:

        <ListView Grid.Row="1" x:Name="SuggestListView" ItemsSource="{Binding SuggestList}" IsMultiSelectCheckBoxEnabled="True" SelectionMode="Multiple">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ctl:PersonUserControl HorizontalAlignment="Left"/>
                </DataTemplate>
            </ListView.ItemTemplate>
            <Interactivity:Interaction.Behaviors>
                <Core:EventTriggerBehavior EventName="SelectionChanged">
                    <Core:InvokeCommandAction Command="{Binding SelectSuggestPersonCommand}"/>
                </Core:EventTriggerBehavior>
            </Interactivity:Interaction.Behaviors>
        </ListView>

Затем в вашей связанной команде для события SelectionChanged, которое вы используете в поведении, вы захотите добавить элементы, которые добавляются и удаляются, в ObservableCollection, к которому вы можете привязаться из другого вашего ListView, чтобы показать выбранные.

Метод будет выглядеть примерно так:

    public ObservableCollection<ItemType> SelectedItems { get; private set; }

    private void SelectedItemsChanged(SelectionChangedEventArgs args)
    {
        foreach (var item in args.AddedItems)
        {
            var vm = item as ItemType;
            if (vm == null)
            {
                continue;
            }

            this.SelectedItems.Add(vm);
        }
        foreach (var item in args.RemovedItems)
        {
            var vm = item as ItemType;
            if (vm == null)
            {
                continue;
            }

            this.SelectedItems.Remove(vm);
        }
    }
person James Croft    schedule 14.12.2015