为什么我需要一个评估,而不是直接从我绑定对象的数据属性
问题描述:
让我的价值,我不拿东西的,我有这个类:为什么我需要一个评估,而不是直接从我绑定对象的数据属性
public class User : BindableObject, INotifyPropertyChanged
{
// ...
[JsonIgnore]
public static readonly BindableProperty PseudoProperty =
BindableProperty.Create(nameof(Pseudo), typeof(string), typeof(User), "");
public string Pseudo
{
get { return (string)GetValue(PseudoProperty); }
set { SetValue(PseudoProperty, value); }
}
// ...
}
这是在像C#的部分中声明:
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MapPage : ContentPage, INotifyPropertyChanged
{
// ...
/// <summary>
/// Current user property.
/// </summary>
public static readonly BindableProperty CurrentuserProperty =
BindableProperty.Create(nameof(CurrentUser), typeof(User), typeof(MapPage), User.GetUserInstance());
/// <summary>
/// Current user accessor
/// </summary>
private User CurrentUser
{
get { return (User)GetValue(CurrentuserProperty); }
set { SetValue(CurrentuserProperty, value); }
}
// ...
public MapPage()
{
base.BindingContext = this;
}
// ...
}
如果我想显示在XAML的Pseudo
财产,我看到网上说我可以这样做的:
<Label Text="{Binding CurrentUser.Pseudo}"/>
但是,它不工作..
奇怪的是,我可以显示在XAML侧Pseudo
,如果我在C#创建侧一个评估:
public string UserPseudo { get { return CurrentUser.Pseudo; } }
我然后结合自己的价值像它:
<Label Text="{Binding UserPseudo}"/>
有人能解释我的逻辑,因为我真的不知道明白为什么我需要一个评估,而不是仅仅结合直接我的标签的值和我的对象的属性值?
感谢帮助..
答
这一切都归结到控制的DataContext的。如果未明确设置,则DataContext也从控件的父级继承。
<Label Text="{Binding CurrentUser.Pseudo}"/>
上述工作,如果你的DataContext
是有一个属性CurrentUser
的对象。
如果您DataContext
是CurrentUser
那么你就
<Label Text="{Binding Pseudo}"/>
所以说,你要根据你CurrentUser
财产控制一个很大的部分。
你可能有这样的事情:
<StackPanel>
<TextBlock Text="{Binding CurrentUser.Psuedo}" />
<TextBlock Text="{Binding CurrentUser.FirstName}" />
<TextBlock Text="{Binding CurrentUser.LastName}" />
</StackPanel>
但是,如果你设置了DataContext
,你可以有这样的:
<StackPanel DataContext="{Binding CurrentUser}">
<TextBlock Text="{Binding Psuedo}" />
<TextBlock Text="{Binding FirstName}" />
<TextBlock Text="{Binding LastName}" />
</StackPanel>
编辑:D'OH!
你实际上遇到的问题是因为你的原始属性是private
。它需要公开才能让XAML看到它。更改
private User CurrentUser...
是
public User CurrentUser...
我接过来一看,但是,我不知道,了解你给了,因为我的价值不是一成不变的链接..再看看我的代码和他的代码;) – Emixam23
你的页面的DataContext设置为什么? –
在构造函数中,我刚刚编辑的帖子:) – Emixam23