2017-04-13 30 views
0

カスタムセルにバインドする作業リストビューがあります。しかし、実際にカスタムセルのプロパティと同じ名前のプロパティを持つモデルを実際に持っている必要があるのだろうかと思います。Xamarinハードコードされたプロパティ名を持たないカスタムセルへのフォームのバインド

マイカスタムviewcell(ものがたくさん出て左):

public class RecordListCell : ViewCell 
{ 
     public static readonly BindableProperty HeadingProperty = BindableProperty.Create ("Heading", typeof (string), typeof (RecordListCell), null); 

     public string Heading { 
      get { return (string)GetValue (HeadingProperty); } 
      set { SetValue (HeadingProperty, value); } 
     } 
     protected Label headingLbl { get; set; } 

     public RecordListCell() 
     { 
      headingLbl = new Label() ; 
      headingLbl.SetBinding (Label.TextProperty, new Binding ("Heading")); 

      // from here on I construct a stacklayout and insert the label above 
    } 
} 

マイページ(ものがたくさん出て左)

public TopicsPage() 
{ 
    _topicList = new ListView(); 
    var cell = new DataTemplate (typeof (RecordListCell)); 
    // NOT WORKING 
    // cell.SetBinding (RecordListCell.HeadingProperty, "Name"); 

    // working (I must name the property exactly like the property in my custom cell) 
    cell.SetBinding (RecordListCell.HeadingProperty, "Heading"); 
    _topicList.ItemTemplate = cell; 

    _topicList.ItemsSource = MyRepo.GetTopics(); 
} 

したがって、上記の作品が、私はMyRepoを持っていることを強制しています.GetTopics()は、Headingという名前のプロパティを持つオブジェクトのリストを返します。私はこのカスタムセルをあらゆる種類のオブジェクトリストで再利用したいと思いますし、私のコメントのようにページ上のバインディングを指定するだけですが、これはうまくいきません。

ここで間違ったことが予想されるのですか、私のアプローチが間違っていますか?

+0

あなたは、見出しの同じページに対する一定になるように期待していますか?または見出しのコンテンツがアイテムのコンテンツによって動的になることを期待していますか? – Frankie

+0

同じページの定数ですが、多くのページで同じカスタムセルを使用したいので、セルにモデルプロパティの名前を付ける必要はありません –

答えて

1

バインディングコンテキストでラベル用のバインディングが設定されている場合は、GetTopics()に "Header"というプロパティがないため、LabelCellとしてバインディングのソースを設定しています。

headingLbl.SetBinding(Label.TextProperty, 
        new Binding("Heading",BindingMode.Default, null, null, null, source: this)); 

今助け

このコードは動作するはずです
cell.SetBinding (RecordListCell.HeadingProperty, "Name"); 

、希望!

+0

これらの追加パラメータはすべてデフォルトのままです。 –

+0

はい、正しくありません。最後のパラメータ、つまりSource:nullはデフォルト値ですが、Headingプロパティを探す親RecordListCellが割り当てられています。 – Dilmah

0

ListViewアイテムのBindingContextはアイテムのモデルに関連付けられています。そのデータをビューセル&データテンプレートに挿入する別の方法を考えなければなりません。

あなたは、残りの部分を(ページごと)の見出しの値に

MyCustomCell(string perPageHeadingText)

を受け入れ、(ページごとに一意になるだろうので)見出し値としてそれを割り当てるためにカスタムビューセルのコンストラクタを変更することができます通常のようにアイテムセルにバインドすることができます。

あなたは、テンプレートを作成するには、別のDataTemplateのコンストラクタを使用します。

var myTemplate = new DataTemplate(() => { return new MyCustomCell("MyPageTitle"); });

+0

私の悪いです。私は、プロパティの名前は、ページではなく、値ごとに一意であることを意味しました。とにかく、Dineshの答えは私のためにそれを解決しました。とにかくありがとう。 –

関連する問題