c# - Xamarin 在页面之间传递参数
问题描述
我正在尝试Page
在点击事件上打开一个新的,它应该显示某个对象的一些详细信息。为此,我需要将对象本身或其 ID 传递给新页面。所以我在详细页面的构造函数中添加了一个参数,如下所示。
void onItemTapped(object sender, ItemTappedEventArgs e)
{
if (e.Item != null)
{
bool convOk = Int32.TryParse((string)e.Item, out int id);
if (convOk)
{
Navigation.PushAsync(new DetailPage(id));
}
}
}
并且DetailPage
有自己的,在代码隐藏DetailViewModel
中设置为。BindingContext
DetailPage
XAML:
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Foo.Views.DetailPage">
<ContentPage.Content>
<StackLayout Orientation="Vertical">
<Label Text="FooBar" />
<Label Text="{Binding trackID}" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
DetailPage
代码隐藏
namespace Foo.Views
{
public partial class DetailPage : ContentPage
{
public DetailPage(int trackID)
{
InitializeComponent();
BindingContext = new DetailViewModel(trackID);
}
}
}
DetailViewModel
:
namespace Foo.ViewModels
{
public class DetailViewModel : BaseViewModel
{
// trackID prop
int _trackID;
int trackID
{
get { return _trackID; }
set
{
_trackID = value;
notifyPropertyChanged(nameof(trackID));
}
}
public TargetDetailViewModel(int tid)
{
trackID = tid;
}
}
}
但是, theDetailPage
和 the之间的绑定DetailViewModel
似乎不起作用,页面没有显示任何内容。id 本身一直正确传递到DetailViewModel
.
这是由于初始化的顺序吗?我假设用 XAML 编写的所有内容都将在DetailPage.InitializeComponent()
方法中执行?如果这是正确的,那么在 ?ViewModel
之前实例化DetailPage.InitializeComponent()
?
任何提示表示赞赏。
解决方案
您的trackID
财产不公开。
注意:如果您查看应用程序日志输出,您可以发现这样的绑定问题(按字符串过滤Binding:
)
未绑定私有变量的日志示例:
Binding: 'trackID' property not found on 'XXXX.VM', target property: 'Xamarin.Forms.Label.Text'
DetailViewModel 修复:
public class DetailViewModel : BaseViewModel
{
int _trackID;
public int trackID;
{
get { return _trackID; }
set
{
_trackID = value;
notifyPropertyChanged(nameof(trackID));
}
}
~~~~
}
推荐阅读
- microsoft-teams - Microsoft Teams:选择时自动完成
- css - 为 Firefox Mobile 设计 option_ui 和 browser_action 页面
- c++ - “充分表达”与“充分表达”
- sql - 如何确定数据集中的开始和结束活动?
- php - 如果未登录,则重定向到 login.php
- python - Django 管理员批量删除排除某些查询集
- javascript - VueJS - 使用 sortableJS 时检测 VueJS 范围内的 DOM 变化
- c - 这段代码计算不正确,有什么想法吗?
- ios - Crashed: com.apple.main-thread EXC_BREAKPOINT 0x0000000100c5009c keyboard_arrow_up
- javascript - 反应JS | 根据标志显示或隐藏对象数组