WinUI3 x: привязка выполняется пакетно/медленно для обновления пользовательского интерфейса.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 WinUI3 x: привязка выполняется пакетно/медленно для обновления пользовательского интерфейса.

Сообщение Anonymous »

Я пытаюсь передать токены из LLM в WinUI3 RichTextBlock. ViewModel реализован с использованием ObservableObject из набора инструментов сообщества в качестве базового класса.
У меня есть сервис, который будет выполнять обратный вызов с помощью следующий токен по мере его получения:

Код: Выделить всё

                var result = await service.StreamContentSummary(
...,
(text) =>
{
dispatcher.TryEnqueue(() =>
{
if (done)
{
return;
}

that.ShowPlaceholder = false;
that.Summary = $"{that.Summary}{text}";
});
},
refresh);

Код: Выделить всё

ShowPlaceholder
и Summary — это ObservableProperties, к которым привязан пользовательский интерфейс.

Код: Выделить всё

    [ObservableProperty]
private string summary;

[ObservableProperty]
private bool showPlaceholder = true;
Я напрямую подключил прослушиватель к PropertyChanged в ViewModel и вижу, что, как и ожидалось, он вызывается для каждого нового токена, добавленного в сводку, однако сам пользовательский интерфейс не отображает каждый добавленный токен; вместо этого пользовательский интерфейс, похоже, не обновляется до тех пор, пока не будет завершен весь ответ, с тем же пользовательским интерфейсом, что и при полном отсутствии потоковой передачи.
Я попробовал вызвать this.Bindings.Update()< /code> в компоненте, чтобы принудительно обновлять привязки в каждом событии PropertyChanged, но пользовательский интерфейс по-прежнему не обновляется, чтобы отобразить содержимое, пока все не будет сделано. p>

Код: Выделить всё

    In Loaded...
ViewModel.PropertyChanged += ViewModel_PropertyChanged;

...

private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(ViewModel.Summary))
{
this.Bindings.Update();
}
}
Я также попробовал переключить привязки {x:Bind} на {Binding}, но это не помогло.
Делает ли WinUI3 что-нибудь пакетной обработки для ограничения скорости обновлений? Есть ли способ заставить пользовательский интерфейс обновляться при изменении свойства Summary в реальном времени, или существует альтернативный подход для выполнения «потоковых» обновлений пользовательского интерфейса?

Подробнее здесь: https://stackoverflow.com/questions/785 ... ate-the-ui
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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