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

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

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

我将此命令绑定到一个按钮上,以搜索某个用户的薪水历史记录,以便它可以输出信息,这非常有效。但是,我还想在加载时以最新薪水执行它信息(当前月份)。 Icommand有可能吗?如果没有,我可以通过什么其他方式在加载时实现此功能。 *注意:这些变量都与SalaryCommand存在于同一视图模型中,而不存在于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),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);
        }

longayang 回答:是否可以在页面加载时执行ICommand?

在Fetching()内部,您创建了一个视图模型,但尚未将其传递给this.DataContext,因此,在更新“ svm”时,该视图就不会在意了。

只需将命令提取到方法中,然后在构造函数中调用它即可。

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

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

页面加载完成后,您可以通过处理Loaded事件来执行相同的命令:

public SalaryPage()
{
    InitializeComponent();
    Loaded += (s,e) =>
    {
        SalaryCommand.Execute(null);
    };
}
本文链接:https://www.f2er.com/2597146.html

大家都在问