我试图打开水龙头时,应显示特定对象的一些详细信息的新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;
}
}
}
然而,DetailPage
和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'
public class DetailViewModel : BaseViewModel
{
int _trackID;
public int trackID;
{
get { return _trackID; }
set
{
_trackID = value;
notifyPropertyChanged(nameof(trackID));
}
}
~~~~
}