CommunityToolkit.Mvvm:ObservableObject中Task<T>的XAML绑定方法
绑定CommunityToolkit.Mvvm中Task结果到XAML的正确写法
你只需要绑定RequestTask的Result属性即可,同时可以添加TargetNullValue或FallbackValue来处理Task未完成时的显示状态:
修改后的XAML绑定代码:
<TextBlock Text="{Binding RequestTask.Result, TargetNullValue='Loading...', FallbackValue='Not started'}"/>
原理说明
ViewModel中使用的SetPropertyAndNotifyOnCompletion方法,会在Task<T>执行完成后自动触发PropertyChanged通知,此时RequestTask.Result会持有异步方法返回的数值,UI会自动更新显示。
可选:优化加载状态显示
如果需要更直观的加载状态区分,可以结合Task的状态属性做绑定,比如:
<StackPanel Orientation="Horizontal" > <TextBlock Text="My value is:"/> <TextBlock Text="{Binding RequestTask.Result}" Visibility="{Binding RequestTask.IsCompleted, Converter={StaticResource BooleanToVisibilityConverter}}"/> <TextBlock Text="Loading..." Visibility="{Binding RequestTask.IsNotCompleted, Converter={StaticResource BooleanToVisibilityConverter}}"/> </StackPanel>
(注:需要提前在XAML资源中声明BooleanToVisibilityConverter,也可使用CommunityToolkit.WinUI中的内置转换器)
内容的提问来源于stack exchange,提问作者luk
相关产品推荐
相关产品推荐

