Xamarin.forms 如何在不刷新/重新加载xamarin表单的情况下转到上一页
因此,我在PageA中有一个ListView,当我点击一个按钮时,它会将我重定向到PageB,现在我在PageB上做一些事情,但是当我点击Ok/Submit时,我需要将这些数据传递到PageA,并加载PageA,而不刷新或重新加载它,这将导致刷新ListView/PageA PageB上的每个更新基本上都是PageA上ListView的每个互动程序的一些内容更新,所以基本上当我单击第一个项目并返回时,它应该只更新该项目 我可以通过MessagingCenter在PageA上订阅,并使用字典将数据发送回PageB,但如果我使用Navigation.PopAsync,它只会刷新PageA上的数据 任何可行的解决方案,因为这是任何应用程序都会有的一个常见功能,但出于某种原因,我无法将其可视化 这是我的密码 PageBXamarin.forms 如何在不刷新/重新加载xamarin表单的情况下转到上一页,xamarin.forms,Xamarin.forms,因此,我在PageA中有一个ListView,当我点击一个按钮时,它会将我重定向到PageB,现在我在PageB上做一些事情,但是当我点击Ok/Submit时,我需要将这些数据传递到PageA,并加载PageA,而不刷新或重新加载它,这将导致刷新ListView/PageA PageB上的每个更新基本上都是PageA上ListView的每个互动程序的一些内容更新,所以基本上当我单击第一个项目并返回时,它应该只更新该项目 我可以通过MessagingCenter在PageA上订阅,并使用字典将数据
var data=newdictionary();
数据。添加(“1”、“1”);
数据。添加(“2”、“2”);
数据。添加(“3”、“3”);
数据。添加(“4”、“4”);
数据。添加(“5”、“5”);
发送(数据,“提交数据”);
Navigation.popsync();
代码PageA
MessagingCenter.Subscribe<Dictionary<string, string>>(this, "SubmitData", (sender) =>
{
try
{
sender.TryGetValue("1", out result[0]);
sender.TryGetValue("2", out result[1]);
sender.TryGetValue("3", out result[2]);
sender.TryGetValue("4", out result[3]);
sender.TryGetValue("5", out result[4]);
}
MessagingCenter.Subscribe(此“提交数据”,(发件人)=>
{
尝试
{
sender.TryGetValue(“1”,输出结果[0]);
sender.TryGetValue(“2”,输出结果[1]);
sender.TryGetValue(“3”,输出结果[2]);
sender.TryGetValue(“4”,输出结果[3]);
sender.TryGetValue(“5”,输出结果[4]);
}
任何帮助都将不胜感激
但是,当我单击Ok/Submit时,我需要将此数据传递给PageA,并加载PageA,而不刷新或重新加载它,这将导致刷新ListView/PageA,PageB上的每个更新基本上是对PageA上ListView的每个磁贴的一些内容更新,因此基本上,当我单击第一个项目并返回时,它应该只更新该项目
根据您的描述,我猜您希望从PageA的ListView中选择一个项目,然后将所选项目传递给PageB,进行一些更改,然后返回PageA并在ListView中更新该项目,对吗
如果是,我建议您可以查看以下代码:
第A页:
<StackLayout>
<ListView
x:Name="listview1"
ItemsSource="{Binding list}"
SelectedItem="{Binding selecteditem}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding username}" />
<Label Text="{Binding age}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Button
x:Name="btn1"
Clicked="btn1_Clicked"
Text="redirect to another page" />
</StackLayout>
public partial class Page8 : ContentPage
{
public viewmodel3 viewmodel { get; set; }
public Page8()
{
viewmodel = new viewmodel3();
InitializeComponent();
this.BindingContext = viewmodel;
}
private void btn1_Clicked(object sender, EventArgs e)
{
Navigation.PushAsync(new Page9(viewmodel.selecteditem));
}
}
public class viewmodel3:ViewModelBase
{
public ObservableCollection<model3> list { get; set; }
private model3 _selecteditem;
public model3 selecteditem
{
get { return _selecteditem; }
set
{
_selecteditem = value;
RaisePropertyChanged("selecteditem");
}
}
public viewmodel3()
{
list = new ObservableCollection<model3>()
{
new model3(){username="cherry",age=29},
new model3(){username="barry",age=32},
new model3(){username="wendy",age=27}
};
MessagingCenter.Subscribe<model3>(this, "Update", (person) =>
{
updateitem(person);
});
}
private void updateitem(model3 item)
{
var person = list.FirstOrDefault(p => p.username == item.username);
if (person != null)
{
person.age = item.age;
}
}
}
public class model3:ViewModelBase
{
private string _username;
public string username
{
get { return _username; }
set
{
_username = value;
RaisePropertyChanged("username");
}
}
private int _age;
public int age
{
get { return _age; }
set
{
_age = value;
RaisePropertyChanged("age");
}
}
}
公共部分类第8页:内容页
{
公共视图模型3视图模型{get;set;}
公共页8()
{
viewmodel=新的viewmodel3();
初始化组件();
this.BindingContext=viewmodel;
}
私有无效btn1_已单击(对象发送方,事件参数e)
{
Navigation.PushAsync(新页面9(viewmodel.selecteditem));
}
}
公共类viewmodel3:ViewModelBase
{
公共ObservableCollection列表{get;set;}
私有模式3 _selecteditem;
公共模型3 selecteditem
{
获取{return\u selecteditem;}
设置
{
_选择editem=值;
RaisePropertyChanged(“selecteditem”);
}
}
公共视图模型3()
{
列表=新的ObservableCollection()
{
新模型3(){username=“cherry”,年龄=29},
新模型3(){username=“barry”,age=32},
新模型3(){username=“wendy”,age=27}
};
MessagingCenter.Subscribe(此“更新”,(个人)=>
{
更新项(人);
});
}
私有无效更新项(模型3项)
{
var person=list.FirstOrDefault(p=>p.username==item.username);
if(person!=null)
{
person.age=item.age;
}
}
}
公共类模型3:ViewModelBase
{
私有字符串\u用户名;
公共字符串用户名
{
获取{return\u username;}
设置
{
_用户名=值;
RaisePropertyChanged(“用户名”);
}
}
私人互联网;
公共信息
{
获取{return\u age;}
设置
{
_年龄=价值;
提高产权变更(“年龄”);
}
}
}
第b页:
<StackLayout>
<Entry x:Name="username" />
<Entry x:Name="age" />
<Button
x:Name="btnsub"
Clicked="btnsub_Clicked"
Text="submit" />
</StackLayout>
public partial class Page9 : ContentPage
{
public model3 item;
public Page9(model3 m)
{
InitializeComponent();
item = new model3();
item.username = m.username;
item.age = m.age;
username.Text = m.username;
age.Text = m.age.ToString();
}
private void btnsub_Clicked(object sender, EventArgs e)
{
if(item.username!=username.Text || item.age!=int.Parse(age.Text))
{
MessagingCenter.Send(new model3() { username = username.Text, age = int.Parse(age.Text) }, "Update");
}
Navigation.PopAsync();
}
}
公共部分类第9页:内容页
{
公共模式3项目;
公共页9(型号3 m)
{
初始化组件();
项目=新模型3();
item.username=m.username;
item.age=m.age;
username.Text=m.username;
age.Text=m.age.ToString();
}
已单击私有void btnsub_(对象发送方,事件参数e)
{
if(item.username!=username.Text | | item.age!=int.Parse(age.Text))
{
Send(newmodel3(){username=username.Text,age=int.Parse(age.Text)},“Update”);
}
Navigation.popsync();
}
}
您在OnAppearing中做了什么吗?如果PageB只是从PageA编辑一个项目,您应该能够将该项目传递到PageB并编辑它,而无需使用MessagingCenter是的,我正在获取PageA listview的数据……当您导航回某个页面时,OnAppearing可能会触发,因此您需要检查您是否没有执行数据多次加载
<StackLayout>
<Entry x:Name="username" />
<Entry x:Name="age" />
<Button
x:Name="btnsub"
Clicked="btnsub_Clicked"
Text="submit" />
</StackLayout>
public partial class Page9 : ContentPage
{
public model3 item;
public Page9(model3 m)
{
InitializeComponent();
item = new model3();
item.username = m.username;
item.age = m.age;
username.Text = m.username;
age.Text = m.age.ToString();
}
private void btnsub_Clicked(object sender, EventArgs e)
{
if(item.username!=username.Text || item.age!=int.Parse(age.Text))
{
MessagingCenter.Send(new model3() { username = username.Text, age = int.Parse(age.Text) }, "Update");
}
Navigation.PopAsync();
}
}