2016-05-27 5 views
0

基本的に私はエディタにテキストを入力すると、私のラベルに挿入されたデータが表示されます機能を作りたいと思います。また、ページを別のページにスワイプすると、データを入力した前のページでそのデータをそのラベルにバインドする必要があります。Xamarinフォームバインディングラベル

私はポータブルクラスを持っています。このクラスでは、私はここに、私は多くのラベル、ボックス、ボタン等を定義しかし、私は最も重要なことを示します方法public ContentPage CreatePage(MyObject thing)を持っている:私は試してみました

public partial class CoolPage: CarouselPage 
    { 
    public CoolPage() 
     { 
      foreach (MyObject p in things) 
      { 
       Children.Add(CreatePage(p)); 
      } 
     } 
    public ContentPage CreatePage(MyObject thing) { 
     var emptyLabel = new Label 
        { 
         Text = "Text", 
         WidthRequest = 50, 
         HeightRequest = 50, 
         BackgroundColor = Color.White 
        }; 
        ((StackLayout)page.Content).Children.Add(emptyLabel); 

     var inputNumb = new Editor 
        { 
         Text=thing.Number, 
         TextColor = Color.Black, 
         HorizontalOptions = LayoutOptions.Fill, 
         VerticalOptions = LayoutOptions.Fill, 
         IsVisible = true, 
         BackgroundColor = Color.White 
        }; 
        inputNumb.SetBinding(Label.TextProperty, "Text"); 
        inputNumb.BindingContext = thing.Number; 
        ((StackLayout)page.Content).Children.Add(inputNumb); 
    } 
} 

なimpelemntする:ここで私は私のラベルとエディタが定義されていますイベント:

inputNumb.Completed += (sender, args) => 
      { 
       inputNumb.SetBinding(Label.TextProperty, "Text"); 
       inputNumb.BindingContext = thing.Number; 
      }; 

ただし、動作しません。それは同じ方法だからだと思います。また、CreatePageメソッドinputCarNumb.Completed += InputCarNumb_Completed;にそのような行を実装することによってメソッドのスコープを外そうとしましたが、あなたが変数inputNumbを定義すると、認識されず、他の場合に実装する方法がわかりません。私はそれがとても簡単だと知っていますが、私はSetBinding/BindingContextを使って何かが恋しくなると思います。

+0

あなたはemptyLabel.SetBinding(Label.TextProperty、新しいバインディング{PATH = "inputNumb.Text"、MODE = BindingMode.TwoWay、ソース=この} '試すことができます); ' プロパティプロパティ値を完成したところでプロパティ名を作成し、その場所でプロパティ名を使用してください。 'inputNumb.Text' – Vishnu

+0

@Vishnu、ありがとうございます。 'emptyLabel.SetBinding(Label.TextProperty、new Binding {Path =" inputNumb.Text "、Mode = BindingMode.TwoWay、Source = this});'このメソッドは動作しません。どんな種類の財産を作るのですか?それはプロパティをバインドされますか? – BinaryTie

+0

プロパティ。 'CoolNodeText''を' get、set'で呼び出すと、 'Path = InputNumbText'の上でそのプロパティをバインドします。 ' OnCompleted'コールセットのプロパティ値を呼び出し、 'OnPropertyChanged(InputNumbText) 'を呼び出します。 – Vishnu

答えて

2

私はこのように、この問題を解決:

emptyLabel.SetBinding(Label.TextProperty, "Text"); 
emptyLabel.BindingContext = inputNumb; 
+0

@BinaryTale - Xamarinチームは、パフォーマンス問題のためにSetBindingステートメントの後にバインディングコンテキストを設定するように指示しています。 https://developer.xamarin.com/api/property/Xamarin.Forms.BindableObject.BindingContext/ –

0

MyObjectがInotifyPropertyChangedから継承して実装されていることを確認し、Numberが変更されたときにPropertyChangedが発生するようにします。私は一般にXLabsのViewModelを継承し、SetPropertyメソッドを使用します。イベントのバインディングの設定を気にしないでください。しかし、SetBindingの2番目のパラメータはMyObjectのプロパティ名である "Number"でなければなりません。また、BindingContextは= thingでなければなりません。