gpt4 book ai didi

c# - 如何根据另一个属性的选择异步更新 viewmodel 属性

转载 作者:行者123 更新时间:2023-11-30 15:28:42 25 4
gpt4 key购买 nike

假设我在 View 中有某种列表控件,我从中选择一个名称,这会在 View 模型中设置一个“SelectedName”属性。选择名称后,我想异步获取与该名称关联的一组数据,并使用该数据设置另一个属性,然后更新 View 中绑定(bind)到该其他数据属性的另一个控件。

不能将 async/await 与属性一起使用,因此不能在“SelectedName”setter 中进行请求和赋值。

这种情况下的 MVVM 最佳实践是什么?

我在想也许名称的选择也可以触发 View 模型中的命令 (RelayAsyncCommand) 的执行,该命令可以执行异步获取和分配工作。但是是否可以保证在命令执行之前更新命令所需的“SelectedName”?

最佳答案

与任何异步 UI 一样,您首先需要考虑的是附加状态的外观。具体来说,您现在处于“正在加载”状态,现在也是考虑“错误”状态的好时机。

我开发了一种在 my MSDN article on async data binding 中描述的类型,这有点像数据绑定(bind) Task<T> .使用该类型,您可以执行以下操作:

public string SelectedName
{
get { return _selectedName; }
set
{
_selectedName = value;
OnPropertyChanged();
SelectedNameDetails = new NotifyTaskCompletion<SelectedNameData>(FetchNameDataAsync());
}
}

public NotifyTaskCompletion<SelectedNameData> SelectedNameDetails
{
get { return _selectedNameDetails; }
set { _selectedNameDetails = value; OnPropertyChanged(); }
}

然后你可以数据绑定(bind)到SelectedNameDetails.Result在加载时显示详细信息;和 SelectedNameDetails.IsNotCompleted , SelectedNameDetails.IsSuccessfullyCompleted , 和 SelectedNameDetails.IsFaulted在加载、成功和错误 View 状态之间切换。

关于c# - 如何根据另一个属性的选择异步更新 viewmodel 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25223265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com