Jump to content

Lista de Objectos, adicionar e remover


Recommended Posts

Posted

Olá pessoal.

eu tenho esta classe:

 public class Favoritos 
    {
        public int Valor { get; set; }
        public string Nome { get; set; }

       
    }

e estas variáveis:

 Int32 ContaArtigos = 0;
 private ObservableCollection<Favoritos> MeuFavorito;

e tenho este código no evento click do botão:

 if (MeuFavorito.Contains(new Favoritos {Nome = Titulo.Text, Valor = ContaArtigos }))
            {
                
                MeuFavorito.Remove(new Favoritos() { Nome = Titulo.Text, Valor = ContaArtigos });

            }
            else
            {
                MeuFavorito.Add(new Favoritos { Nome = Titulo.Text, Valor = ContaArtigos });
            }

em que o objetivo é adicionar um artigo aos favoritos sempre que se clica no botão, mas caso o mesmo já esteja nos favoritos que seja retirado.

Não estou à vontade com as listas ... (esta é Observable porque está ligada a uma Listview, e assim a listview é actualizada). Para adicionar funciona bem, agora para retirar é que não funciona...

Não sei se o método Contains é o mais correto, nem sei se estou a enviar bem os valores...

O que é que está mal?

Obrigado.

Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

Posted

Repara no que estás a fazer no remove: estás a criar uma instância nova dos "Favoritos", logo o que ele vai remover é o que acabou de ser criado.
Tens de encontrar a instância correta a remover.

Podes fazer uma iteração pelos elementos para descobrires qual o que queres remover, algo deste tipo:

foreach (var item in MeuFavorito)
{
  if (item.Titulo == Titulo.Text)
  {
    itemSet.Remove(item);
    break;
  }
}
10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

M6, obrigado pela ajuda, tive que fazer uma pequena alteração porque o VS2017 não me aceitava o itemSet, mas ele já remove o favorito caso exista. 

No entanto caso adicione um favorito, o retire, e volte a adicionar/remover outro favorito ele queixa-se e diz que a lista mudou e que não pode fazer a iteração.

Em relação ao adicionar o favorito caso ele não exista não está a funcionar. Tenho quase a certeza que estou a colocar o código no sitio errado.. ele ficou assim:

foreach (var item in MeuFavorito)
            {
                if (item.Nome == Titulo.Text)
                {
                    MeuFavorito.Remove(item);
                    break;
                }
               
                MeuFavorito.Add(new Favoritos { Nome = Titulo.Text, Valor = ContaArtigos });
                

            }

Já comentei o break, já coloquei um else, um else if e ele não me deixa adicionar um favorito que ainda não existe.

O facto de o código ser chamado pelo Event Handler de um botão pode influenciar o funcionamento? Será que tenho que mandar actualizar a lista dos favoritos de cada vez que ele corre o if?

Obrigado.

Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

Posted

Boas... fica aqui outra ideia...

var f = MeuFavorito.FirstOrDefault(t => t.Nome == Titulo.Text);

if (f != null)
{
    MeuFavorito.Remove(f);
}
else
{
    MeuFavorito.Add(new Favoritos() { Nome = Titulo.Text, Valor = ContaArtigos});
}

Já agora, faz mais sentido teres o nome da classe no singular (Favoritos), e o nome da colecção no plurar (MeuFavorito)

  • Vote 1
Posted

Boas vikcch, obrigado pela ajuda, era mesmo isto.

Agora sem querer abusar explica-me esta parte:

13 minutos atrás, vikcch disse:

var f = MeuFavorito.FirstOrDefault(t => t.Nome == Titulo.Text);

Portanto percebo que estás a criar uma variável de nome f que vai ser igual ao primeiro? item da lista dos MeuFavorito, mas a parte dentro de parêntesis, não estou a perceber..

Mais uma vez, obrigado pela ajuda. 

Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.