Hi.
I start a project in my work using xamarin.forms and prism. I create a view with a listview, follow a code:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http: // xamarin.com/schemas/2014/forms" xmlns:x="http: // schemas.microsoft.com/winfx/2009/xaml" x:Class="TrackerMobile.Forms.Views.Permissao" xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" prism:ViewModelLocator.AutowireViewModel="True" x:Name="permissaoView"> <ContentPage.Content> <ListView x:Name="lstPermissoes" GroupDisplayBinding="{Binding Titulo}" RowHeight="75" IsGroupingEnabled="true" ItemsSource="{Binding PermissoesExibir}"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <ViewCell.View> <StackLayout Orientation="Horizontal" Padding="0"> <Label Text="{Binding Descricao}"/> </StackLayout> </ViewCell.View> </ViewCell> </DataTemplate> </ListView.ItemTemplate> <ListView.GroupHeaderTemplate> <DataTemplate> <ViewCell> <StackLayout Orientation="Horizontal" Padding="5,5,5,5"> <Button Image="{Binding IconeEstado}" BackgroundColor="Transparent" BorderColor="Transparent" BorderWidth="0" Command="{Binding BindingContext.ExpandirRecolherCommand,Source={x:Reference permissaoView}}" CommandParameter="{Binding .}"> </Button> <Label Text="{Binding TituloQuantidadeSubItens}"/> </StackLayout> </ViewCell> </DataTemplate> </ListView.GroupHeaderTemplate> </ListView> </ContentPage.Content> </ContentPage>
In my button I need change image when I click it, I included imagens in android projetc in mipmap folders, but the image not loaded and I the exception is throwed, follow my viewmodel and my ObservableCollection implementation:
`
using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using TrackerMobile.Forms.Modelos;
using TrackerMobile.Forms.Util;
namespace TrackerMobile.Forms.ViewModels
{
public class PermissaoViewModel : BindableBase
{
private ObservableCollection _permissoes = new ObservableCollection();
private ObservableCollection _permissoesExibir;
public ObservableCollection PermissoesExibir
{
get => _permissoesExibir;
set => SetProperty(ref _permissoesExibir, value);
}
public PermissaoViewModel()
{
_permissoes = MenuPermissaoCollection.Todos;
MontarLista();
}
private void MontarLista()
{
PermissoesExibir = new ObservableCollection<MenuPermissaoCollection>();
for (int i = 0; i < _permissoes.Count; i++)
{
MenuPermissaoCollection mp = _permissoes[i];
MenuPermissaoCollection menuPermissoes = new MenuPermissaoCollection(mp.Id, mp.Titulo)
{
QuantidadeSubMenus = _permissoes[_permissoes.IndexOf(mp)].Count
};
if (mp.Expandir)
{
foreach(MenuPermissao m in mp)
{
menuPermissoes.Add(m);
}
}
PermissoesExibir.Add(menuPermissoes);
}
}
public DelegateCommand<MenuPermissaoCollection> ExpandirRecolherCommand
{
get
{
return new DelegateCommand<MenuPermissaoCollection>((mp) =>
{
int indiceItem = PermissoesExibir.IndexOf(mp);
_permissoes[indiceItem].Expandir = !_permissoes[indiceItem].Expandir;
MontarLista();
});
}
}
}
}
`
`
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Text;
using TrackerMobile.Forms.I18n;
namespace TrackerMobile.Forms.Modelos
{
public class MenuPermissaoCollection : ObservableCollection, INotifyPropertyChanged
{
public MenuPermissaoCollection(long id, string titulo, bool expandido = false)
{
Id = id;
Titulo = titulo;
Expandir = expandido;
}
public long Id { get; set; }
public string Titulo { get; set; }
public string TituloQuantidadeSubItens
{
get => string.Format("{0} ({1})", Titulo, QuantidadeSubMenus);
}
public string IconeEstado
{
get => Expandir ? "expandido.png" : "recolhido.png";
}
public int QuantidadeSubMenus { get; set; }
private bool _expandir;
public bool Expandir
{
get => _expandir;
set
{
if (_expandir != value)
{
_expandir = value;
OnPropertyChanged("Expandir");
}
}
}
public event PropertyChangedEventHandler PropertyChangedEvent;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
if (!string.IsNullOrWhiteSpace(propertyName))
{
PropertyChangedEvent?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public static ObservableCollection<MenuPermissaoCollection> Todos { get; set; }
static MenuPermissaoCollection()
{
ObservableCollection<MenuPermissaoCollection> Grupos = new ObservableCollection<MenuPermissaoCollection>
{
new MenuPermissaoCollection(16L, AppResources.Permissao_MenuMapa)
{
new MenuPermissao { Id = 20L, Descricao = AppResources.Permissao_MenuMapaAdministrador },
new MenuPermissao { Id = 17L, Descricao = AppResources.Permissao_MenuMapaLocalizacaoAtual },
new MenuPermissao { Id = 57L, Descricao = AppResources.Permissao_MenuMapaTempoRealExpandido },
new MenuPermissao { Id = 58L, Descricao = AppResources.Permissao_MenuMapaTempoRealGrid }
},
new MenuPermissaoCollection(38L, AppResources.Permissao_MenuRelatorio)
{
new MenuPermissao { Id = 55L, Descricao = AppResources.Permissao_MenuRelatorioHodometro },
new MenuPermissao { Id = 52L, Descricao = AppResources.Permissao_MenuRelatorioHorimetro },
new MenuPermissao { Id = 21L, Descricao = AppResources.Permissao_MenuRelatorioPercursosAnteriores },
new MenuPermissao { Id = 54L, Descricao = AppResources.Permissao_MenuRelatorioVeiculosCliente },
new MenuPermissao { Id = 50L, Descricao = AppResources.Permissao_MenuRelatorioVelocimetro }
},
new MenuPermissaoCollection(1L, AppResources.Permissao_MenuCadastro)
{
new MenuPermissao { Id = 25L, Descricao = AppResources.Permissao_MenuCadastroAlerta },
new MenuPermissao { Id = 39L, Descricao = AppResources.Permissao_MenuCadastroAnotacao },
new MenuPermissao { Id = 23L, Descricao = AppResources.Permissao_MenuCadastroCercaVirtual },
new MenuPermissao { Id = 14L, Descricao = AppResources.Permissao_MenuCadastroCliente },
new MenuPermissao { Id = 67L, Descricao = AppResources.Permissao_MenuCadastroIdMotorista },
new MenuPermissao { Id = 18L, Descricao = AppResources.Permissao_MenuCadastroMotorista },
new MenuPermissao { Id = 4L, Descricao = AppResources.Permissao_MenuCadastroPerfil },
new MenuPermissao { Id = 10L, Descricao = AppResources.Permissao_MenuCadastroPermissoes },
new MenuPermissao { Id = 22L, Descricao = AppResources.Permissao_MenuCadastroPontoControle },
new MenuPermissao { Id = 24L, Descricao = AppResources.Permissao_MenuCadastroRotaDeterminada },
new MenuPermissao { Id = 26L, Descricao = AppResources.Permissao_MenuCadastroUsuario },
new MenuPermissao { Id = 15L, Descricao = AppResources.Permissao_MenuCadastroVeiculo },
new MenuPermissao { Id = 68L, Descricao = AppResources.Permissao_MenuCadastroVincularIdMotorista },
new MenuPermissao { Id = 42L, Descricao = AppResources.Permissao_MenuCadastroVincularMotorista }
},
new MenuPermissaoCollection(12L, AppResources.Permissao_MenuConsultar)
{
new MenuPermissao { Id = 36L, Descricao = AppResources.Permissao_MenuConsultarAlertaCadastrado },
new MenuPermissao { Id = 37L, Descricao = AppResources.Permissao_MenuConsultarAlertaDisparado },
new MenuPermissao { Id = 47L, Descricao = AppResources.Permissao_MenuConsultarAlertaTratado },
new MenuPermissao { Id = 40L, Descricao = AppResources.Permissao_MenuConsultarAnotacoes },
new MenuPermissao { Id = 34L, Descricao = AppResources.Permissao_MenuConsultarCercaVirtual },
new MenuPermissao { Id = 30L, Descricao = AppResources.Permissao_MenuConsultarCliente },
new MenuPermissao { Id = 69L, Descricao = AppResources.Permissao_MenuConsultarIdMotoristaCadastrado },
new MenuPermissao { Id = 70L, Descricao = AppResources.Permissao_MenuConsultarIdMotoristaVeiculo },
new MenuPermissao { Id = 32L, Descricao = AppResources.Permissao_MenuConsultarMotorista },
new MenuPermissao { Id = 28L, Descricao = AppResources.Permissao_MenuConsultarPerfil },
new MenuPermissao { Id = 33L, Descricao = AppResources.Permissao_MenuConsultarPontoControle },
new MenuPermissao { Id = 35L, Descricao = AppResources.Permissao_MenuConsultarRotaDeterminada },
new MenuPermissao { Id = 29L, Descricao = AppResources.Permissao_MenuConsultarUsuario },
new MenuPermissao { Id = 31L, Descricao = AppResources.Permissao_MenuConsultarVeiculoCadastrado },
new MenuPermissao { Id = 48L, Descricao = AppResources.Permissao_MenuConsultarVeiculoProximo }
},
new MenuPermissaoCollection(3L, AppResources.Permissao_MenuAjustes)
{
new MenuPermissao { Id = 61L, Descricao = AppResources.Permissao_MenuAjustesAlterarTema },
new MenuPermissao { Id = 62L, Descricao = AppResources.Permissao_MenuAjustesAlterarSenha },
new MenuPermissao { Id = 27L, Descricao = AppResources.Permissao_MenuAjustesEnviarComando },
new MenuPermissao { Id = 43L, Descricao = AppResources.Permissao_MenuAjustesExcluirPosicaoFutura },
new MenuPermissao { Id = 49L, Descricao = AppResources.Permissao_MenuAjustesParametros }
}
};
Todos = Grupos;
}
}
}
`