gpt4 book ai didi

c# - 是否可以在页面加载时执行 ICommand?

转载 作者:行者123 更新时间:2023-12-03 11:01:35 25 4
gpt4 key购买 nike

我的 View 模型中有一个 Icommand,如下所示:

 public ICommand SalaryCommand
{
get
{
return new Command(async () =>
{
await _apiServices.FetchSalary(this);
});
}
}


我将此命令绑定(bind)到一个按钮,以搜索某个用户的工资历史记录,以便它输出信息,效果很好。但是,我也想在加载时使用最新的工资信息(当前月)。 Icommand 可以吗?如果没有,我可以通过哪些其他方式在加载时实现此功能。
*注意:变量都存在于与 SalaryCommand 相同的 View 模型中,而不是 FetchSalary() 的类中;

我尝试在主工资页面中执行此操作,但没有成功:
        public SalaryPage()
{
InitializeComponent();
Fetching();
}
private async void Fetching()
{
ApiServices _apiServices = new ApiServices();
SalaryViewModel svm = new SalaryViewModel();
string year = DateTime.Now.Year.ToString();
string month = DateTime.Now.Month.ToString();
await _apiServices.FetchSalary(svm);
}


这是适用于按钮的 FetchSalary() 函数
         public async Task FetchSalary(SalaryViewModel svm)
{
Debug.WriteLine("Welcome to the fetch salary method");
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("UserID",App._username),
new KeyValuePair<string, string>("Year",svm.dSYear),
new KeyValuePair<string, string>("Month",svm.dSMonth)
};
var request = new HttpRequestMessage(HttpMethod.Post, "somelink");

request.Content = new FormUrlEncodedContent(keyValues);

var client = new HttpClient();
var response = await client.SendAsync(request);

var content = await response.Content.ReadAsStringAsync();
Debug.WriteLine(content);


start = content.IndexOf("Sal_Trsp") + "Sal_Trsp".Length;
end = content.IndexOf("Sal_NssfMedPay") - start;
string transportation = content.Substring(start, end);
svm.sTransportation = "Transportation: " + simplify(transportation);


start = content.IndexOf("Sal_Date_Year") + "Sal_Date_Year".Length;
end = content.IndexOf("Sal_Date_Month") - start;
string yyear = content.Substring(start, end);
svm.sYear = "Year: " + simplify(yyear);

start = content.IndexOf("Sal_Date_Month") + "Sal_Date_Month".Length;
end = content.IndexOf("}") - start;
string mmonth = content.Substring(start, end);
svm.sMonth = "Month: " + simplify(mmonth);

start = content.IndexOf("Sal_NetPaid") + "Sal_NetPaid".Length;
end = content.IndexOf("Sal_users_FK") - start;
string retString = content.Substring(start, end);
svm.sNetPay = "Net Paid: " + simplify(retString);
Debug.WriteLine(svm.sNetPay);
}

最佳答案

在 Fetching() 中,您创建了一个 View 模型,但您没有将它传递给 this.DataContext,因此当“svm”更新时, View 并不关心。

只需将您的命令提取到一个方法中并在您的构造函数中调用它。

public SalaryViewModel() {
Task.Run(async () => await FetchingAsync());
}

public ICommand SalaryCommand
{
get
{
return new Command(async () => await FetchingAsync());
}
}
private async Task FetchingAsync() {
_apiServices.FetchSalary(this);
}

关于c# - 是否可以在页面加载时执行 ICommand?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60814547/

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