为什么我需要一个评估,而不是直接从我绑定对象的数据属性

问题描述:

让我的价值,我不拿东西的,我有这个类:为什么我需要一个评估,而不是直接从我绑定对象的数据属性

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}"/> 

有人能解释我的逻辑,因为我真的不知道明白为什么我需要一个评估,而不是仅仅结合直接我的标签的值和我的对象的属性值?

感谢帮助..

+0

我接过来一看,但是,我不知道,了解你给了,因为我的价值不是一成不变的链接..再看看我的代码和他的代码;) – Emixam23

+0

你的页面的DataContext设置为什么? –

+0

在构造函数中,我刚刚编辑的帖子:) – Emixam23

这一切都归结到控制的DataContext的。如果未明确设置,则DataContext也从控件的父级继承。

<Label Text="{Binding CurrentUser.Pseudo}"/> 

上述工作,如果你的DataContext是有一个属性CurrentUser的对象。

如果您DataContextCurrentUser那么你就

<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... 
+0

好的谢谢,但是,我怎么能改变DataContext的一点代码?对不起,但我不确定要理解..:/ – Emixam23

+0

我没有关注,每个控件都有一个属性'DataContext',你可以绑定到它,我会试着举一个我认为你在问什么的例子for。 – TyCobb

+0

好的,我很抱歉,我真的很笨。..感谢解释 – Emixam23