Флажок элемента WPF ListviewItem.Как получить все выбранные товары? - PullRequest
12 голосов
/ 09 апреля 2011

У меня есть этот код:

<ListView Height="238" 
              HorizontalAlignment="Left" 
              Name="listView1" 
              VerticalAlignment="Top" 
              Width="503"
              ItemsSource="{Binding}"
              IsSynchronizedWithCurrentItem="True">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                               <CheckBox Tag="{Binding ID}"/>  
                           </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn DisplayMemberBinding="{Binding ID}" Header="ID" />
                    <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" />
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>

enter image description here

Как узнать, сколько флажков выбрано, и получить тег значения каждого флажка, который выбран?

Ответы [ 3 ]

20 голосов
/ 26 сентября 2013

я знаю, что оно старое, но для потомков, если люди споткнутся на это, вот решение

<ListView Height="238" 
              HorizontalAlignment="Left" 
              Name="listView1" 
              VerticalAlignment="Top" 
              Width="503"
              ItemsSource="{Binding}"
              IsSynchronizedWithCurrentItem="True"
              SelectionChanged="listView1_SelectionChanged">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                               <CheckBox Tag="{Binding ID}" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=IsSelected}" />  
                           </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn DisplayMemberBinding="{Binding ID}" Header="ID" />
                    <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" />
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>

, тогда в файле cs код этого в listView__eelectionChanged

private List<MyObject> lstMyObject = new List<MyObject>();

private void listView1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    foreach (MyObject item in e.RemovedItems)
    {
        lstMyObject.Remove(item);
    }

    foreach (MyObject  item in e.AddedItems)
    {
       lstMyObject.Add(item);
    }
}

lstMyObject должен быть таким жевведите в качестве объекта, привязанного к списку.и код просто добавит и удалит ссылку на элементы исходного списка в этом списке.

Теперь все, что вам нужно сделать, - это перебрать этот список, который будет содержать только фактически выбранные элементы.это работает только для одиночного выбора, за исключением того, что lstMyObject будет постоянно содержать 1 запись.

6 голосов
/ 09 апреля 2011

Это должно быть так же просто, как связать свойство IsChecked CheckBox со свойством в ViewModel (вам может потребоваться добавить новое свойство, если оно еще не существует).Затем, после нажатия кнопки, вы просто перебираете все элементы в коллекции и удаляете те, которые отмечены (на основе значения свойства в ViewModel).

0 голосов
/ 22 марта 2018

Предложение ...

Так же, как свойство Tag во всех элементах управления Windows, у меня всегда было свойство Tag во всех моих моделях данных для общего использования во время выполнения.Я использую это свойство для хранения проверенного состояния элемента в ListView.В других обстоятельствах я использую их и для удержания сложных объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...