/ / WPF ListView multiseleção usando CheckBox personalizado dentro - wpf, xaml, listview, ligação de dados, seleção múltipla

WPF ListView multi-seleção usando CheckBox personalizado dentro - wpf, xaml, listview, ligação de dados, multi-seleção

Eu tenho um modelo de objeto bastante complexo tendo objetos / modelos de coleção personalizados aninhados, como mostrado abaixo:

public sealed class LibraryInfo : NamedModel
{
public ClassInfos _classes;
public ClassInfos Classes
{
get { return _classes; }
set { SetProperty(ref _classes, value); }
}
}

public class ClassInfos : List<ClassInfo> { }

public sealed class ClassInfo : NamedModel
{
public PropertyInfos _properties;
public PropertyInfos Properties
{
get { return _properties; }
set { SetProperty(ref _properties, value); }
}
}

public class PropertyInfos : List<PropertyInfo> { }

public sealed class PropertyInfo : NamedModel
{
}

Eu quero ligar LibraryInfo aulas em um ListView para seleção de turmas.

<ListView SelectedItem="{Binding SelectedClass}" ItemsSource="{Binding LibraryInfo.Classes}">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
</GridView>
</ListView.View>
</ListView>

E com base em ClassInfo seleção Quero mostrar propriedades da classe selecionada em outro ListView para seleção de propriedades.

<ListView ItemsSource="{Binding SelectedClass.Properties}">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
</GridView>
</ListView.View>
</ListView>

O problema é que, como posso rastrear itens marcados (CheckBox IsChecked) porque meu modelo original não contém nenhuma propriedade como IsActive, para manter o campo relacionado à interface do usuário dissociado do meu modelo.

Estou procurando uma solução elegante e simples para esse problema.

Respostas:

1 para resposta № 1

Use comportamentos de mesclagem.

Use um Collection na tua ViewModel para itens selecionados.

Escrever um ICommand chamado UpdateSelectedItemsCommand e passar parâmetros 1/0 para adicionar / excluir itens.

        <CheckBox ...>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{Binding UpdateSelectedItemsCommand}"
CommandParameter="1"/>
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<i:InvokeCommandAction Command="{Binding UpdateSelectedItemsCommand}"
CommandParameter="0"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>