Estou criando uma documentação do aplicativo no qual eu permitir que pessoas de dentro da minha empresa para acesso a documentação sobre determinado software. Com isso, eu tenho uma página onde qualquer administrador pode gerenciar as categorias e os usuários. Por isso, eu quero que o administrador seja capaz de alterar a ordem de uma categoria em que deve ser exibida na minha NavigationMenu. Agora, a parte onde ele deve corretamente a ordem de categorias com base em uma Ordem dentro da NavigationMenu obras. Mas quando tento editar categorias existentes e seus números de ordem, as ordens não atualizar adequadamente, consulte este exemplo:
Este é antes de editar categorias existentes, estas categorias são recém-adicionado/fez
Isto é, após a edição das categorias, "Reagir", deve ser da Ordem de 2, Onde API seria da Ordem de 0, e a prova seria de Ordem 1
Como você pode ver, o fim não faz mais sentido nenhum. Obviamente, não deve ser permitido que mais de 1 de qualquer ordem.
Agora, o problema é mais provável de vir a partir deste código.
CategoryService.cs
public async Task<List<Category>> InsertCategory(Category category)
{
await GetCategories();
for (int i = 0; i < Categories.Where(c => c.Order >= category.Order).Count(); i++)
{
Categories[i].Order++;
if (Categories[i].Order == category.Order)
{
Categories[i].Order--;
break;
}
}
await categoryRepository.InsertAsync(Categories);
EventHelper.NotifyCategoryListChanged(Categories, EventArgs.Empty);
return Categories;
}
A ordem do código vai como esta:
CategoryDialog.navalha
private async void SaveCategory(Category category)
{
if(!string.IsNullOrEmpty(category.Name))
{
await categoryService.SaveCategory(category);
Snackbar.Add("Category " + category.Name + " added", Severity.Success);
MudDialog.Close(DialogResult.Ok(category.Id));
}
else
{
Snackbar.Add("Please enter a category name.", Severity.Warning);
}
}
O código acima é chamado depois de premir um botão. Este passa ao longo de uma categoria, com um certo número de ordem, este número é transmitido ao longo de um simples menu suspenso.
O SaveCategory
função se parece com isso:
CategorySerice.cs
public async Task<Category> SaveCategory(Category category)
{
await InsertCategory(category);
if (categoryRepository.GetByIdAsync(category.Id) == null)
{
await categoryRepository.AddAsync(category);
}
else
{
await categoryRepository.SaveAsync(category);
}
EventHelper.NotifyCategoryListChanged(Categories, EventArgs.Empty);
return category;
}
Esta função chama a problemática da função antes de realmente salvar/adicionar nada ao banco de dados. Então, ele pode ter lugar para o recém-adicionado ou editado categoria.
Após isso, um Evento é acionado para notificar minha NavigationMenu que houve alterações feitas, e ele deve re-renderização para mostrar isso. Isso não tem problemas.
Mas eu não consigo descobrir como eu seria adequadamente têm as Ordens ser listado quando eu alterá-los. Lembrete rápido, esta função não funciona quando a edição de categorias existentes. Se eu adicionar uma nova categoria, por exemplo, na ordem de 2. Ele faz corretamente mudança de tudo sem problema.
Qualquer ajuda é bem-vindo!
CategoryService.cs
Esta é uma fonte única de verdade, quandoGetCategories
é chamado, ele agarra novas informações a partir do banco de dados.