Место общения программистов C#
-
Anonymous
Изменения обновления пользовательского интерфейса, внесенные в элемент, находящийся в ObservableCollection.
Сообщение
Anonymous »
Сообщение:
Код: Выделить всё
public partial class Message : ObservableObject
{
[ObservableProperty]
public string text;
[ObservableProperty]
public bool isUser;
}
Наблюдаемая коллекция:
Код: Выделить всё
public class MainPageViewModel : ObservableObject
{
public ObservableCollection Messages { get; } = new();
Когда пользователь отправляет сообщение (выполнение кнопки)
Код: Выделить всё
var aiResponse = new Message { Text = string.Empty, IsUser = false };
Messages.Add(aiResponse);
await StreamAiResponseAsync(MessageText, aiResponse);
Потоковое вещание:
Код: Выделить всё
await foreach(var text in session.ChatAsync(new ChatHistory.Message(AuthorRole.User, userInput), inferenceParams))
{
responseBuilder.AppendLine(text);
aiMessage.Text = responseBuilder.ToString();
Console.Write(text);
await MainThread.InvokeOnMainThreadAsync(() =>
{
OnPropertyChanged(nameof(Messages));
// Force layout update
(Application.Current.MainPage as IView)?.InvalidateArrange();
});
}
Код XAML:
Код: Выделить всё
...
Подробнее здесь: [url]https://stackoverflow.com/questions/78786106/ui-updating-changes-made-in-an-item-thats-in-an-observablecollection[/url]
1721784737
Anonymous
Сообщение:
[code]public partial class Message : ObservableObject
{
[ObservableProperty]
public string text;
[ObservableProperty]
public bool isUser;
}
[/code]
Наблюдаемая коллекция:
[code]public class MainPageViewModel : ObservableObject
{
public ObservableCollection Messages { get; } = new();
[/code]
Когда пользователь отправляет сообщение (выполнение кнопки)
[code]var aiResponse = new Message { Text = string.Empty, IsUser = false };
Messages.Add(aiResponse);
await StreamAiResponseAsync(MessageText, aiResponse);
[/code]
Потоковое вещание:
[code] await foreach(var text in session.ChatAsync(new ChatHistory.Message(AuthorRole.User, userInput), inferenceParams))
{
responseBuilder.AppendLine(text);
aiMessage.Text = responseBuilder.ToString();
Console.Write(text);
await MainThread.InvokeOnMainThreadAsync(() =>
{
OnPropertyChanged(nameof(Messages));
// Force layout update
(Application.Current.MainPage as IView)?.InvalidateArrange();
});
}
[/code]
Код XAML:
[code]
...
Подробнее здесь: [url]https://stackoverflow.com/questions/78786106/ui-updating-changes-made-in-an-item-thats-in-an-observablecollection[/url]