Hello,
Welcome to our Microsoft Q&A platform!
I found there are several problems in your app.
- According to your description,the first page should be
OperatorsPage
notSelectOperatorPage
:MainPage = new OperatorsPage(); // not `MainPage = new SelectOperatorPage(); `
- When you come back from page
SelectOperatorPage
, you can pass the selectedOperatorModel
model to pageOperatorsPage
by several methods(e.g.EventHandler
,MessageCenter
). - Here I will use
EventHandler
to pass data back.
You can refer to the following code:
OperatorsPage.xaml.cs
When navigating to page SelectOperatorPage
, we can init ReturnValue
as follows
page.ReturnValue += delegate (object s, OperatorModel operatorModel)
{
BackCall(s, operatorModel);
};
The whole code is :
public partial class OperatorsPage : ContentPage
{
OperatorViewModel ovm;
OperatorModel opm;
public OperatorsPage()
{
InitializeComponent();
//ovm = _ovm;
//opm = ovm.SelectedOperator;
// string name = opm.OperatorName;
opm = new OperatorModel();
BindingContext = opm;
}
private async void BackButton_Clicked(object sender, EventArgs e)
{
// await Navigation.PopModalAsync();
}
private async void AddOperatorButton_Clicked(object sender, EventArgs e)
{
//await Navigation.PushModalAsync(new NewOperatorPage());
}
private async void SelectOperatorButton_Clicked(object sender, EventArgs e)
{
SelectOperatorPage page = new SelectOperatorPage();
page.ReturnValue += delegate (object s, OperatorModel operatorModel)
{
BackCall(s, operatorModel);
};
await Navigation.PushModalAsync(page);
}
private void BackCall(object s, OperatorModel model)
{
opm.OperatorName = model.OperatorName;
}
}
OperatorModel.cs
To make the UI refresh automatically when the value of OperatorName
is changed ,we can make OperatorModel
implement interface INotifyPropertyChanged
public class OperatorModel: INotifyPropertyChanged
{
public int OperatorID { get; set; }
string _operatorName;
public string OperatorName
{
set { SetProperty(ref _operatorName, value); }
get { return _operatorName; }
}
public string OperatorPhone { get; set; }
public string OperatorEmail { get; set; }
public string OperatorAvatar { get; set; }
public OperatorModel() {
}
public OperatorModel(int operatorID, string operatorName, string operatorPhone, string operatorEmail, string operatorAvatar)
{
OperatorID = operatorID;
OperatorName = operatorName;
OperatorPhone = operatorPhone;
OperatorEmail = operatorEmail;
OperatorAvatar = operatorAvatar;
}
bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (Object.Equals(storage, value))
return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
SelectOperatorPage.xaml.cs
In this page, we add EventHandler ReturnValue
, and when we select one item, we can pass the selected OperatorModel
back to page OperatorsPage
.
public partial class SelectOperatorPage : ContentPage
{
OperatorViewModel ovm;
public EventHandler<OperatorModel> ReturnValue;
public SelectOperatorPage()
{
InitializeComponent();
ovm = new OperatorViewModel();
// ovm.HFNName = "Brookey's Hands Free Notes";
BindingContext = ovm;
}
protected override async void OnAppearing()
{
base.OnAppearing();
await ovm.GetOperators();
OperatorListView.ItemsSource = ovm.OperatorList;
}
private async void BackButton_Clicked(object sender, EventArgs e)
{
await Navigation.PopModalAsync();
}
private async void OperatorListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
if (e.SelectedItem != null)
{
// Typecast the e.SelectedItem object to an OperatorModel
OperatorModel operatorModel = (OperatorModel)e.SelectedItem;
ovm.SelectedOperator = operatorModel;
await DisplayAlert("Alert", "Selected Operator: " + ovm.SelectedOperator.OperatorName, "Exit");
EventHandler<OperatorModel> handler = ReturnValue;
if (handler != null)
{
handler(this, operatorModel);
}
await Navigation.PopModalAsync();
}
}
}
The result is:
Best Regards,
Jessie Zhang
---
If the response is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.