Пользовательский интерфейс Blazor не обновляется с помощью StateHasChangedC#

Место общения программистов C#
Ответить
Anonymous
 Пользовательский интерфейс Blazor не обновляется с помощью StateHasChanged

Сообщение Anonymous »

У меня возникли трудности с автоматическим обновлением пользовательского интерфейса, я привязал LifetimeService.Items к таблице, но он не обновляется, когда я вызываю InvokeAsync(StateHasChanged)
I' Я пробовал все, что мог придумать, например IDisposible в LifetimeService, переход от List к OberservableCollection и т. д., а также очистку и перестройку моего проекта.
Я дважды проверил, что список элементов заполняется правильно. и это. Это работает, если я вручную обновлю страницу.
Буду очень признателен за любую помощь. Спасибо
Вот мой стол
table class="table">


Image
Name
Price
Link
ItemSlot



@foreach (var item in LifetimeService.Items)
{


Изображение

@item.Name
@item.Price
Link


}




У меня есть класс LifetimeService, содержащий список элементов
public class LifetimeService
{

public int ScanAmounts = 0;

public List Items { get; set; } = new List();

public bool AddItem(Item item)
{
if (Items.Any(x => x.Name == item.Name && x.Price == item.Price && x.Image == item.Image && x.Link == item.Link))
{
return false;
}
if (ScanAmounts == 0)
{
Items.Add(item);
return true;
}
else
{
Items.Insert(0, item);
return true;
}
}

}

Мой метод работает по таймеру, который захватывает данные, а затем запускается
await InvokeAsync(StateHasChanged);
protected override async Task OnParametersSetAsync()
{
await base.OnParametersSetAsync();

if (LifetimeService.Items.Count > 0)
{
return;
}
StartTimer();
await ScrapeData();
}

private void StartTimer()
{
_timer = new Timer(async _ =>
{
await InvokeAsync(ScrapeData);
}, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
}


private async Task ScrapeData()
{
{
{
...
var added = LifetimeService.AddItem(new Item { Name = name, Price = price, Image = img, Link = link });
if (added)
{
addedAnythingToList = true;
Debug.WriteLine("Title: " + title);
Debug.WriteLine("Price: " + price);
Debug.WriteLine("Name: " + name);
Debug.WriteLine("Image: " + img);
}
}

if (addedAnythingToList)
{
Debug.WriteLine("Invoking state has changed");
await InvokeAsync(StateHasChanged);
Debug.WriteLine("Finished Invoking");
}

// Close the browser
}
catch (Exception ex)
{
Debug.WriteLine("Error: " + ex.Message);
Debug.WriteLine("Inner: " + ex.InnerException);

}
finally
{
// Ensure the driver quits even if an exception occurs
driver.Dispose();
driver.Quit();
Process[] processes = Process.GetProcessesByName("chromedriver");
foreach (Process process in processes)
{
process.Kill();
}
stopwatch.Stop();
Debug.WriteLine("Time taken: " + stopwatch.Elapsed);
await InvokeAsync(StateHasChanged);
LifetimeService.ScanAmounts++;
}
...



Подробнее здесь: https://stackoverflow.com/questions/786 ... haschanged
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»