2016-11-09 11 views
1

Windowsで表示しているXamarin.Formsを使用してアプリケーションを構築しました。 要件: - > リストビュー内の項目をタップ - ここではUIxamarin.forms:リストビューがexpexctedとして更新されない

の項目の変更のために表示される値は、関連するXAML NOTEです:私は

<ListView.ItemTemplate > 
    <StackLayout VerticalOptions="Center" HorizontalOptions="Center" > 
    <Label Text="Passo dopo passo" VerticalOptions="Center" HorizontalOptions="Center" /> 
    <Button Clicked="GetGroceries" Text="Get Groceries" ></Button> 
    <ListView x:Name="lvGroceries" ItemTapped="GroceryItemTapped" > 
    <ListView.ItemTemplate > 
の後ろのコードからListView.ItemsSourceを設定しています

ここでは、項目がタップされてもうまく動作するが、UIは変更されないC#コードの背後にあります。


    public ObservableCollection oc; 
    public void GroceryItemTapped (object o, ItemTappedEventArgs e) 
    { 
    if (e.Item == null) { 
     return; 
    } 
    var g = ((GroceryItem)e.Item); 
    // oc is populated and exactly what I expect here 
    foreach (var gr in oc) 
    { 
     // the next line grabs the item I want 
     if (gr.GroceryId == g.GroceryId) 
     { 
      gr.GroceryName = "snot"; 
     } } } 

    // when the above code runs, the data is already in oc and this code ran 
    lvGroceries.ItemsSource = oc; 

アイデア?

+1

GroceryItemはINotifyPropertyChangedを実装していますか? – Jason

答えて

1

あなたはあなたのコレクションにあなたのListViewをバインドする必要があります。

<ListView x:Name="lvGroceries" ItemsSource="{Binding oc}" ItemTapped="GroceryItemTapped" > 

あなたはまた、あなたのContentPage.BindingContextを設定する必要があります。あなたのコレクションが更新されると、いつでもINotifyPropertyChangedを実装してOnPropertyChanged()を実行する必要があります。最後に、ItemSourceをリセットするのではなく、oc.Add()をコレクションに追加する必要があります。これはバインディングを上書きするためです。

Xamarin Forms Binding Documentationで探していることを強くお勧めします。

+0

ガイダンスをありがとう。私はそれを試みます。もちろん私はXamarin Docsを勉強しています。私がそれを試していない限り、ここで質問するのは無責任なことです。 – pdschuller

+0

OK。あなたが言いました4つの事柄のうちの1つを実行するだけでしたが、あなたは緑のチェックマークを取得します。 私はクラスGroceryItemを持っていました。そのクラスにINotifyPropertyChangedを実装し、変更していたプロパティのOnPropertyChangedイベントを発生させなければなりませんでした。 このmsdnドキュメントは本当に私を助けました。 https://msdn.microsoft.com/en-us/library/ms743695(v=vs.110).aspx – pdschuller

+0

@pdschuller嬉しいことに、他の人のためのリンクを追加してくれてありがとう!あなたがそれ以上の問題に遭遇したら私に教えてください。 – hvaughan3

関連する問題