使用 ReactiveUI 和 GUI.cs 异步数据加载
我是反应式世界的新手,所以我在这里有点挣扎 x)
这是我的问题:
我如何获取异步数据,然后将它们绑定到标签?
在我的 MainView.cs
中,我有一个标签:
Label usernameLabel = new()
{
Text = "Loading",
X = 0,
Y = 1
};
在我的 MainViewModel.cs
中:
public ReactiveCommand<Unit, UserProfile> LoadUsers { get; }
public MainViewModel(AppClient client)
{
LoadUsers = ReactiveCommand.CreateFromTask(async _ => await client.GetUserProfile());
LoadUsers.ObserveOn(RxApp.MainThreadScheduler).Subscribe(x => UserProfile = x);
LoadUsers.Execute().Subscribe();
}
并且 UserProfile.cs
包含基本内容
internal sealed class UserProfile
{
public string DisplayName { get; set; }
// ...
}
首先,我发现这是在互联网上的,有一个教程(我不记得在哪里),所以我不知道这是否是正确的做法。我了解如何使用与 UI 事件等相关的用户命令,但在本例中不了解。
所以,是的,基本上:我如何将此命令的结果绑定到我的标签?
参考文献:
I'm new to the reactive world so i'm struggling a little bit here x)
Here is my question:
How can i fetch async data, then bind them to a label ?
In my MainView.cs
, i have a label:
Label usernameLabel = new()
{
Text = "Loading",
X = 0,
Y = 1
};
And in my MainViewModel.cs
:
public ReactiveCommand<Unit, UserProfile> LoadUsers { get; }
public MainViewModel(AppClient client)
{
LoadUsers = ReactiveCommand.CreateFromTask(async _ => await client.GetUserProfile());
LoadUsers.ObserveOn(RxApp.MainThreadScheduler).Subscribe(x => UserProfile = x);
LoadUsers.Execute().Subscribe();
}
And UserProfile.cs
contains basic things
internal sealed class UserProfile
{
public string DisplayName { get; set; }
// ...
}
First, i found this on internet, with a tutorial (i don't remember where tho), so i don't know if it was the right thing to do. I understand how to user commands associated with UI events etc, but not in this case.
So yeah, basically: How can i bind the result of this command to my label ?
Refs:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
鉴于,
UserProfile
和MainViewModel
实现了INotifyPropertyChanged
:您可以这样做:
实现
INotifyPropertyChanged
的一个简单方法是让您的视图模型类继承ReactiveObject
并使用ReactiveUI.Fody
Gui.cs 反应式示例
关于 ReactiveUI.Fody 的 ReactiveUI 页面
Given, that
UserProfile
andMainViewModel
implementsINotifyPropertyChanged
:You can do:
An easy way to implement
INotifyPropertyChanged
is to let your viewmodel classes inheritReactiveObject
and useReactiveUI.Fody
Gui.cs reactive example
ReactiveUI page about ReactiveUI.Fody