2017-01-16 4 views
0

私はコードで直接制御したい項目を持つListViewを作成しています。私はジェネリックListViewを宣言する次のxamlを持っています。Xamarinフォーム - ViewCellでデータバインドされたオブジェクトにアクセスする

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:local="clr-namespace:ViewCellClick" 
      x:Class="ViewCellClick.MainPage"> 
    <ListView x:Name="___listview" HasUnevenRows="True"> 
     <ListView.ItemTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</ContentPage> 

次に、コードの後ろにItemsSourceプロパティを設定しました。

namespace ViewCellClick 
{ 
    public partial class MainPage : ContentPage 
    { 
     public MainPage() 
     { 
      InitializeComponent(); 
      ___listview.ItemsSource = Repository.GetList(); 
      ___listview.ItemTemplate = new DataTemplate(typeof(CustomViewCell)); 
     } 
    } 

、これは、このレベルでは

public class CustomViewCell : ViewCell 
    { 
     public CustomViewCell() 
     { 
      var stack = new StackLayout(); 

      stack.Children.Add(new Label() { Text = "Label" }); 

      // HOW DO I ACCESS THE MODEL HERE SO I CAN DRAW CUSTOM UI DEPENDING ON THE MODEL INSTANCE? 

      View = stack; 
     } 
    } 
} 

...として定義されたカスタムテンプレートを活用し、それが唯一のラベルを作成して、私は非常に一般的なカスタムビューのセルを持っています。しかし、モデルが複雑で、モデルのデータに応じて、そのViewCellインスタンスに異なるUIを描画します。

各CustomViewCellのモデルへのアクセス権を取得し、そのモデルに従ってUIを描画するにはどうすればよいですか?

私はBindingContextを試しましたが、CustomViewCellコンストラクタではnullです。 thew ViewCellの

enter image description here

答えて

1

BindingContextは、リスト内の現在の項目への参照を有することになります。それを使用するには、適切なタイプにキャストする必要があります。

+0

ありがとうございました。実際に試しましたが、コンストラクタでnullです(これを反映するように更新されました)。 BindingContextがnullではない別のイベントがありますが、コントロールを作成するのに適していますか? –

+0

あなたが使用できるBindingContextChangedイベントがある – Jason

+0

それはOnAppearingが良い方法だと思われます。私はそこにBindingContextへのアクセス権を持っています。 –

関連する問題