Gnrtuga Posted March 30, 2018 at 05:50 PM Report #609994 Posted March 30, 2018 at 05:50 PM 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.. :)
M6 Posted March 31, 2018 at 04:35 PM Report #610013 Posted March 31, 2018 at 04:35 PM 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."
Gnrtuga Posted April 1, 2018 at 05:40 PM Author Report #610020 Posted April 1, 2018 at 05:40 PM 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.. :)
vikcch Posted April 1, 2018 at 08:11 PM Report #610022 Posted April 1, 2018 at 08:11 PM 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) 1 Report
Gnrtuga Posted April 1, 2018 at 08:28 PM Author Report #610023 Posted April 1, 2018 at 08:28 PM 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.. :)
vikcch Posted April 1, 2018 at 08:36 PM Report #610024 Posted April 1, 2018 at 08:36 PM São Lambda Expressions, este video explica bem... https://www.youtube.com/watch?v=Ftbrn82BPcc
Gnrtuga Posted April 2, 2018 at 02:06 PM Author Report #610028 Posted April 2, 2018 at 02:06 PM Ok, obrigado! Vou já ver 🙂 Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!) Nunca mais é verão outra vez.. :)
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now