2017-08-10 65 views
1

讓我的價值,我不拿東西的,我有這個類:爲什麼我需要一個評估,而不是直接從我綁定對象的數據屬性

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

回答

3

這一切都歸結到控制的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

相關問題