2016-11-26 9 views
1

私は、xamarinプロジェクトでデータバインディングを使用して表示されるカスタムビューのカスタムリストを取得しようとしています(各ビューにコントロールを追加します)。しかし、私は私のプロジェクトを実行すると、何もリストに表示されません。私はデータバインディングのものに少し慣れているので少し混乱しています。私は検索し、いくつかの他の解決策を試みたが、私の特定の問題を把握することができませんでした。どんな助けもありがとう。ここに私のコード:ListViewカスタムビューでのデータバインディング

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="XamarinTuts.XMainPage"> 

    <ContentPage.Content> 
    <StackLayout> 
     <Label Text="Tasks:" HorizontalTextAlignment="Start" VerticalTextAlignment="Start" x:Name="tasksLabel"></Label> 
     <ListView ItemsSource="{Binding taskItems}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
      <Frame BackgroundColor="Black" Padding="5"> 
       <Grid> 
       <StackLayout Name="TextStack" Orientation="Vertical" Grid.Column="0"> 
        <Label Text="{Binding Name}"></Label> 
        <Label Text="{Binding Description}"></Label> 
       </StackLayout> 
       <StackLayout Name="ButtonStack" Orientation="Horizontal" HorizontalOptions="End" Grid.Column="1"> 
        <Button Name="Edit" Text="Edit" Width="50" Height="50"></Button> 
       </StackLayout> 
       </Grid> 
      </Frame> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
     </ListView> 

    </StackLayout> 

    </ContentPage.Content> 

</ContentPage> 

これは私のXAMLです。ここに私のXMainPage.csです:

私TestViewModel.cs続く
public partial class XMainPage : ContentPage 
{ 


    TestViewModel vm; 

    public XMainPage() 
    { 

     InitializeComponent(); 

     vm = new TestViewModel(); 

     TaskListItem testItem = new TaskListItem(this, "Go shopping", "Drive to meijer and get the following: Milk, Eggs, Booze"); 
     TaskListItem testItem2 = new TaskListItem(this, "Play Overwatch", "Pwn some n00bs"); 
     vm.taskItems.Add(testItem); 
     vm.taskItems.Add(testItem2); 


     BindingContext = vm; 
    } 

} 

私TaskListItem.cs続く
public class TestViewModel : INotifyPropertyChanged 
{ 

    ObservableCollection<TaskListItem> mtaskItems; 

    public TestViewModel() 
    { 
     mtaskItems = new ObservableCollection<TaskListItem>(); 
    } 


    public ObservableCollection<TaskListItem> taskItems 
    { 
     get 
     { 
      return mtaskItems; 
     } 
     set 
     { 
      mtaskItems = value; 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 

    void OnPropertyChanged(string name = null) 
    { 

     var changed = PropertyChanged; 

     if (changed == null) 
      return; 

     changed.Invoke(this, new PropertyChangedEventArgs(name)); 

    } 
} 

public class TaskListItem : ViewCell 
{ 

    public Task newTask; 

    String mName; 
    String mDescription; 

    public String Name 
    { 
     get 
     { 
      return mName; 
     } 
    } 

    public String Description 
    { 
     get 
     { 
      return mDescription; 
     } 
    } 


    public TaskListItem(ContentPage taskListItemParent, String TaskName, String TaskDescription) 
    { 
     //newTask = new Task(TaskName, TaskDescription); 

     mName = TaskName; 
     mDescription = TaskDescription; 

    } 
} 

答えて

0

あなたは上のBindingContextプロパティを設定していませんビューに。 ViewModelを作成し、Observable Collectionをパブリックプロパティとして持つ必要があります。

TestViewModel vm; 

    public XMainPage() 
    { 
     InitializeComponent(); 

     vm = new TestViewModel(); 

     BindingContext = vm; 
    } 

Xamarin.Formsを使用する場合は、MVVMパターンに従うことをお勧めします。 Here is a simple sampleプロジェクトでは、より良いデータバインディングとすべての部分がどのようにつながっているかを理解するのに役立ちます。また、this chapter of the Xamarin.Forms bookでデータバインドが非常にうまく説明されています

+0

私のコードをあなたの提案で更新しましたが、それでも私のためには機能しません。私はそれが正しく設定されているように見えるが、何もページに表示されていない。私はまだ何かが欠けていますか? – Jremery1337

+0

私には無効なXAMLがいくつかありました。ちょっと手を加えた後、私はそれを正しく表示することができました。ご協力いただきありがとうございます! – Jremery1337

+0

コンパイル時にそれらのエラーを見つけることができないのは間違いです。情報が助けてくれてうれしい –

関連する問題