2017-03-21 61 views
2

我做了一個顯示文本的自定義視圖。Xamarin DataBinding bindableProperty(CustomView)

在TestView.xaml

<?xml version="1.0" encoding="UTF-8"?> 
<ContentView 
    xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="EodiRoad.TestView"> 
    <StackLayout> 

     <Label Text="{Binding Test}"/> 
     <Label Text="this is test view"/> 

    </StackLayout> 
</ContentView> 

和代碼隱藏在

TestView.xaml.cs

public partial class TestView : ContentView 
    { 


     public static BindableProperty TestProperty = 
      BindableProperty.Create(
       propertyName: "Test", 
       returnType: typeof(string), 
       declaringType: typeof(TestView), 
       defaultValue:"???" 
      ); 

     public string Test 
     { 
      get 
      { return (string)GetValue(TestProperty); } 
      set 
      { 
       Debug.WriteLine("test setted value = " + (string)value); 
       SetValue(TestProperty, value); 
      } 
     } 



     public TestView() 
     { 
      InitializeComponent(); 
      BindingContext = this; 
     } 
    } 

當我使用這個就是這樣

<local:TestView Test="hjhkhjk"/> 
其他頁面

it會工作得很好。但是,當我一個數據綁定到該

<local:TestView Test="{Binding post.uploader.username}"/> 

那麼它不會desplay什麼...

它不是post.uploader.username值是錯誤的或一些這樣的事情的問題。因爲

<Label Text="{Binding post.uploader.username}"/> 

我有這樣的代碼有權根據該故障線路,它只是正常工作太..

我到底做錯了什麼? 如何解決它..?

+0

你可能需要實現'PropertyChanged'功能讓用戶界面知道你的價值更新 –

+0

好吧,我會嘗試。但這會解釋爲什麼/// ///此工作和/// ///這不是?? – uzu

+0

因爲將它設置爲靜態值只需設置一次,就是這樣。在使用綁定時,值首先獲取默認值(空),綁定發生時值會更新。因爲你缺少屬性改變的邏輯值永遠不會更新在UI –

回答

0

您只能從TestView類中的BindableObject屬性對象進行綁定。例如,如果你會寫下面的代碼:

<local:TestView Test="{Binding post.uploader.username}" /> 

BindableObject對象必須post屬性對象,其中有uploader屬性對象,其中有username屬性字符串

+0

對不起。但那不回答我的問題 – uzu