我不知道如何將引數傳遞到新頁面,我有工廠委托可以幫助我進行依賴注入,但我也想通過 Navigate 服務傳遞引數。
應用程式.xml
private void ConfigureServices(ServiceCollection serviceCollection)
{
serviceCollection.AddTransient<Home>();
serviceCollection.AddSingleton<Func<Home>>(ServiceProvider => ServiceProvider.GetService<Home>);
serviceCollection.AddTransient<PrinterDetails>();
serviceCollection.AddSingleton<Func<PrinterDetails>>(ServiceProvider => ServiceProvider.GetService<PrinterDetails>);
serviceCollection.AddTransient<ProvinceList>();
serviceCollection.AddSingleton<Func<ProvinceList>>(ServiceProvider => ServiceProvider.GetService<ProvinceList>);
serviceCollection.AddSingleton(Configuration);
serviceCollection.AddTransient<ISqlDataAccess, SqlDataAccess>();
serviceCollection.AddTransient<IProvinceListViewModel, ProvinceListViewModel>();
serviceCollection.AddTransient(typeof(MainWindow));
}
我使用 NavigationService 從 PrinterDetails 頁面導航到 ProvinceList 頁面(當我單擊 btnProvince_Click() 時)
public partial class PrinterDetails : Page, INotifyPropertyChanged
{
private Func<ProvinceList> ProvinceListFactory { get; }
public PrinterDetails(Func<ProvinceList> provinceListFactory)
{
InitializeComponent();
DataContext = this;
PrinterService printerService = new PrinterService();
cmbPrinterList.ItemsSource = printerService.PrinterList();
ProvinceListFactory = provinceListFactory;
}
private void btnProvince_Click(object sender, RoutedEventArgs e)
{
ProvinceList nextPage = this.ProvinceListFactory.Invoke();
NavigationService.Navigate(nextPage);
}
}
我要傳遞引數的ProvinceList頁面
public partial class ProvinceList : Page
{
private readonly IProvinceListViewModel _provinceListViewModel;
public ProvinceList(IProvinceListViewModel provinceListViewModel)
{
InitializeComponent();
_provinceListViewModel = provinceListViewModel;
GetProvinceList();
}
private void GetProvinceList()
{
//How to get parameter from previous page
}
}
uj5u.com熱心網友回復:
您可以在ProvinceList. 然后PrinterDetails可以在使用工廠創建實體后設定此屬性:
private void btnProvince_Click(object sender, RoutedEventArgs e)
{
double parameter = 4.5;
ProvinceList nextPage = this.ProvinceListFactory.Invoke();
nextPage.Value = parameter;
NavigationService.Navigate(nextPage);
}
或者,您可以將此引數添加到的建構式中ProvinceList,然后配置 IoC 容器以注入引數。如果引數是動態結果,您必須將您的工廠配置為接受此引數。注冊接受引數 eg 的工廠委托,該引數Func<IProvinceListViewModel, double, ProvinceList>用于構造型別:
// This example assumes that the constructor of ProvinceList
// requests two parameters of type IProvinceListViewModel and double
serviceCollection.AddSingleton<Func<double, ProvinceList>>(serviceProvider => doubleParameter =>
{
IProvinceListViewModel viewModel = serviceProvider.GetService<IProvinceListViewModel>();
return new ProvinceList(viewModel, doubleParameter);
});
serviceCollection.AddTransient<IProvinceListViewModel, ProvinceListViewModel>();
并使用工廠如下:
public PrinterDetails(Func<double, ProvinceList> provinceListFactory)
{
InitializeComponent();
ProvinceListFactory = provinceListFactory;
}
private void btnProvince_Click(object sender, RoutedEventArgs e)
{
double constructorParameter = 4.5;
ProvinceList nextPage = this.ProvinceListFactory.Invoke(constructorParameter);
NavigationService.Navigate(nextPage);
}
回答后續問題:
// This example assumes that the constructor of ProvinceList
// requests two parameters of type IProvinceListViewModel and double
serviceCollection.AddSingleton<Func<double, ProvinceList>>(serviceProvider => doubleParameter =>
{
IProvinceListViewModel viewModel = serviceProvider.GetService<IProvinceListViewModel>();
Func<POPList> popListFactory = serviceProvider.GetService<Func<POPList>>();
return new ProvinceList(viewModel, doubleParameter, popListFactory);
});
serviceCollection.AddTransient<IProvinceListViewModel, ProvinceListViewModel>();
serviceCollection.AddTransient<POPList>();
serviceCollection.AddSingleton<Func<POPList>>(serviceProvider => serviceProvider.GetService<POPList>);
private void btnProvince_Click(object sender, RoutedEventArgs e)
{
double constructorParameter = 4.5;
ProvinceList nextPage = this.ProvinceListFactory.Invoke(constructorParameter);
NavigationService.Navigate(nextPage);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494718.html
