c# - 如何通过单击主页中的按钮将数据从第二页传输到第三页
问题描述
我正在尝试创建一个应用程序,该应用程序将具有一个 包含 2 个按钮的主页。
- 第一个按钮打开一个包含 2 个选择器的弹出页面,用户必须选择一些值,完成后返回主页面。
- 主页上的第二个按钮打开一个内容页面,该页面有 2 个标签,这些标签应该从弹出页面接收数据。所以它应该像一个最终报告页面。如果有人可以为我提供一个更适合使用 MVVM 的简单代码,我将不胜感激。我已经创建了一个类似的应用程序,但将主页作为 MasterDetailPage 并且它运行良好,我现在唯一的问题是,我希望将主页作为内容页面而不是 masterdetailpage。我希望我写的可以理解
主页 xaml
<Button x:Name="board" Clicked="board_Clicked" Text="board Setup" />
<Button x:Name="lblFinalPage" Clicked="lblFinalPage_Clicked" Text="FinalPage" />
第二页
<Picker SelectedItem="{Binding PICKER1}" WidthRequest="120" FontSize="10" TextColor="Black" VerticalOptions="Center" BackgroundColor="WhiteSmoke">
<Picker.Items>
<x:String>15 cm</x:String>
<x:String>30 cm</x:String>
<x:String>45 cm</x:String>
<x:String>60 cm</x:String>
<
</Picker.Items>
</Picker>
<Picker SelectedItem="{Binding PICKER2}" WidthRequest="120" FontSize="10" TextColor="Black" VerticalOptions="Center" BackgroundColor="WhiteSmoke">
<Picker.Items>
<x:String>Supine</x:String>
<x:String>Fst</x:String>
</Picker.Items>
</Picker>
第三页
<Label Text="{Binding piCKER1}"></Label>
<Label Text="{Binding piCKER2}" ></Label>
第二视图
public secondview()
{
SaveCommand = new Xamarin.Forms.Command(HandleAction);
}
async void HandleAction(object obj)
{
await ((App5.App)App.Current).MainPage.Navigation.PushAsync(
new finalPage()
{
BindingContext = new finalpageViewModel(PICKER1)
});
}
string picker1;
public string PICKER1
{
get
{
return picker1;
}
set
{
if (value != picker1)
{
picker1 = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(PICKER1)));
}
}
}
public ICommand SaveCommand
{
get;
set;
}
public event PropertyChangedEventHandler PropertyChanged;
}
最后一页
public finalpageViewModel(string pICKER1)
{
piCKER1 = pICKER1;
}
public string piCKER1
{
get;
set;
}
我在这里遇到的问题是,它仅在我在第二页中有按钮时才有效,然后我可以将数据传递到最后一页,但我希望用户返回主页并执行其他操作和单击另一个按钮并导航到最后一页
解决方案
您可以创建一个DataModel模型类来存储字符串数据,它可以用来传递到第三页。
public class DataModel
{
public string PICKER1 { set; get; }
public string PICKER2 { set; get; }
public DataModel()
{
}
}
然后在MainPage 中,绑定此数据模型并将MainPageBindingContext
传递到第二页或第三页。
public partial class PageMain : ContentPage
{
public DataModel dataModel;
public PageMain()
{
InitializeComponent();
dataModel = new DataModel();
BindingContext = dataModel;
}
private void Button_Clicked_Second(object sender, EventArgs e)
{
Navigation.PushAsync(new PageSecond(BindingContext));
}
private void Button_Clicked_Third(object sender, EventArgs e)
{
Navigation.PushAsync(new PageFinal(BindingContext));
}
}
SecondPage需要绑定传递的BindingContext
:
public partial class PageSecond : ContentPage
{
public PageSecond(object bindingContext)
{
InitializeComponent();
BindingContext = bindingContext;
}
}
ThirdPage 还需要绑定传递的BindingContext
:
public partial class PageFinal : ContentPage
{
public PageFinal(object bindingContext)
{
InitializeComponent();
BindingContext = bindingContext;
}
}
MainPage和SecondPage的Xaml代码不需要修改。但是,ThirdPage需要修改其text 的绑定名称以保持与:Label
DataModel
<Label Text="{Binding PICKER1}"></Label>
<Label Text="{Binding PICKER2}" ></Label>
现在我们可以看到效果:
推荐阅读
- python - 当我使用 [[]] 作为我的索引号时,为什么它会返回这个?
- firebase - 在 null 上调用了 getter 'uid'。接收者:null 尝试调用:uid Flutter Firebase
- rust - 借来的价值还不够活?
- google-cloud-platform - GCP Pubsub 未传递消息的数量不会改变
- java - 如何在 JFileChooser 保存对话框中处理问号或星号(“?”或“*”)?
- laravel - Carbon 方法返回 0
- node.js - 在 socket.io 节点中打开从后端到运行在不同机器上的客户端的套接字连接
- typescript - ts-node 在另一个 ts-node 包中执行带有模块导入的打字稿
- git - GIT分支未合并
- javascript - 脚本标签未在 MacBook 上加载外部 JS 文件