gpt4 book ai didi

c# - MVVM 和异步属性

转载 作者:行者123 更新时间:2023-11-30 20:17:38 25 4
gpt4 key购买 nike

我有一个具有以下属性的 ViewModel

public Employee SelectedEmployee
{
get { return _selectedEmployee; }
set
{
if (value == _selectedEmployee) return;
_selectedEmployee = value;

if (_selectedEmployee != null)
{
StaffHolidaysViewModel.HolidayAllowance = _staffDataService.EmployeeHolidayAllowance(_selectedEmployee.Id);
FireEmployeeSelectedMessage(SelectedEmployee.Id);
}

RaisePropertyChanged();
RaisePropertyChanged(nameof(Allowance));
RaisePropertyChanged(nameof(Taken));
RaisePropertyChanged(nameof(Remaining));
RaisePropertyChanged(nameof(TotalAbsences));
RaisePropertyChanged(nameof(TotalSick));
RaisePropertyChanged(nameof(TotalNonSickAbsences));
RaisePropertyChanged(nameof(SelectedEmployeeLeavingDate));
UpdateCanExecuteChanged();
}
}

线

StaffHolidaysViewModel.HolidayAllowance = _staffDataService.EmployeeHolidayAllowance(_selectedEmployee.Id);

包含对我想要异步化的方法的调用。我不知道我该怎么做,因为 SelectedEmployee 是一个绑定(bind)属性。

<ComboBox Name="StaffMembers" ItemsSource="{Binding FilteredEmployees}" SelectedItem="{Binding SelectedEmployee}" Width="200" BorderThickness="1" BorderBrush="DimGray">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

因为它是一个属性,所以我无法创建它的类型 Task<Employee>

异步绑定(bind) MVVM 属性的推荐方法是什么?还是根本不可能?

最佳答案

Contains a call to a method that I'd like to make asynchronous.

我在 async MVVM data binding 上有一篇文章.本质上,我通常做的是创建一个数据绑定(bind) Task - 我称之为 NotifyTaskCompletion在文章中,缩写为 NotifyTask in my updated library .

您可以通过更改 StaffHolidaysViewModel.HolidayAllowance 的类型来使用它从它是什么(我称之为 THolidayAllowance )到 NotifyTask<T>包装器(例如 NotifyTask<THolidayAllowance> )。

然后,你可以同步设置它:

StaffHolidaysViewModel.HolidayAllowance = NotifyTask.Create(
_staffDataService.EmployeeHolidayAllowanceAsync(_selectedEmployee.Id));

你在这里做的是开始 EmployeeHolidayAllowanceAsync然后包装它的 TaskNotifyTask .这是同步完成的,因此可以在属性 setter 中完成。

然后,您的数据绑定(bind)也需要更新。 NotifyTask<T> has several properties that you can use .最明显的是 Result ,最终将保存 EmployeeHolidayAllowanceAsync 的结果(它返回一个默认值,直到 EmployeeHolidayAllowanceAsync 完成)。还有 IsNotCompletedIsFaulted ,您将要使用它来向用户指示数据尚未到达或存在一些错误。

关于c# - MVVM 和异步属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44292041/

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