我正在嘗試為 iOS 應用程式動態創建選項卡。
我通過了一個帶有 shell 導航的變數,它從資料庫中加載專案,我們為每個物件創建一個選項卡。
我遇到的問題是代碼隱藏在外殼導航將變數從視圖模型傳遞到代碼隱藏之前運行。
視圖模型:
{
[QueryProperty(nameof(Number), nameof(Number))]
public class TabbedPageViewModel : BaseViewModel
{
private int _Number;
public TabbedPageViewModel()
{
}
public int Number
{
get => _Number;
set => SetProperty(ref _Number, value);
}
}
代碼隱藏:
public partial class TabbedPage : TabbedPage
{
TabbedPageViewModel _viewModel;
public TabbedPage()
{
BindingContext = _viewModel = new TabbedPageViewModel();
InitializeComponent();
LoadTabs();
}
private void LoadTabs()
{
var results = Database.GetAsync(_viewModel.Number).Result;
foreach (var _result in results)
{
var from = _result.A;
var to = _result.B;
var _title = from "-" to;
this.Children.Add(new ContentPage { Title = _title });
}
}
}
如何延遲代碼隱藏,以便 shell 導航在 LoadTabs() 運行之前設定 Number 變數?
uj5u.com熱心網友回復:
我最終使用了訊息中心:
代碼隱藏
public TabbedPage()
{
InitializeComponent();
BindingContext = _viewModel = new TabbedPageViewModel();
MessagingCenter.Subscribe<TabbedPageViewModel>(this, "NumberChanged", (sender) =>
{ LoadTabs(); }
);
}
視圖模型:
public int Number
{
get => _number;
set
{
SetProperty(ref _number, value);
MessagingCenter.Send<TabbedPageViewModel>(this, "NumberChanged");
}
}
uj5u.com熱心網友回復:
您的問題是因為您沒有在 BindingContext 之前進行初始化。
public TabbedPage()
{
InitializeComponent();
BindingContext = _viewModel = new TabbedPageViewModel();
LoadTabs();
}
使用建構式發送號碼:
int num = 1;
await Navigation.PushAsync (new TabbedPage (num));
然后
public TabbedPage(int num)
{
InitializeComponent();
BindingContext = _viewModel = new TabbedPageViewModel();
LoadTabs(num);
}
private void LoadTabs(int num)
{
var results = Database.GetAsync(num).Result;
foreach (var _result in results)
{
var from = _result.A;
var to = _result.B;
var _title = from "-" to;
this.Children.Add(new ContentPage { Title = _title });
}
}
或者如果使用外殼:
[QueryProperty(nameof(Number), "number")]
public partial class TabbedPage : TabbedPage
{
private int _Number;
public int Number
{
get => _Number;
set => SetProperty(ref _Number, value);
}
public TabbedPage()
{
InitializeComponent();
BindingContext = _viewModel = new TabbedPageViewModel();
LoadTabs();
}
private void LoadTabs()
{
var results = Database.GetAsync(Number).Result;
foreach (var _result in results)
{
var from = _result.A;
var to = _result.B;
var _title = from "-" to;
this.Children.Add(new ContentPage { Title = _title });
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/432725.html
