2016-12-10 18 views
0

INotifyPropertyChangedインターフェイスが実装されていないBookクラスが提供されており、変更できません。私はBookのコレクションを持っています。これはXamarinのListViewに表示したいものです。だから、:通常のクラスのObservableCollectionへのXamarin Listviewのバインド

public class BookListViewModel : INotifyPropertyChanged 
{ 
    public ObservableCollection<Book> Books { get; set; } 

    private void TestAction() 
    { 
     Books[1].Name = "New Name"; 
     //Here I need to inform the list to refresh 
    } 
} 

は今、私は私のListView.ItemsSourceこのBooksをバインドします。 ListViewに更新を通知するにはどうすればよいですか?私はOnPropertyChanged("Books");のコメントをどこに運んでいないのかを試してみました。

答えて

0

OnPropertyChanged("Books");を試してみると、これは要素の数が変更されたことを要素自体ではなくリストに通知するために使用されます。

あなたはモデルレベルでINotifyPropertyChangedを実装することができないので、あなたの場合には、リスト内のセルを変更する場合、トリックにある:

  1. あなたがそう
  2. コールOnPropertyChanged("Books");を変更したい要素を削除しますリストが更新されます
  3. 変更する要素を新しいデータで追加します。
  4. OnPropertyChanged("Books");を呼び出して、リストが更新されたセルでリフレッシュされるようにします。

このソルティウムは問題を解決する可能性がありますが、ビューリストを2度再描画する必要があるため、パフォーマンスが悪いことがあります。クラスブックが頻繁にchangableであれば、私はあなたがそれが

INotifyPropertyChangedを実装するためにそれを変更する必要があると言うだろうそれともINotifyPropertyChangedを実装のインスタンスを持っているでしょうブッククラスの真ん中のコピーを持っているかもしれませんは、そのプロパティをriplicaクラスから参照しています。 オートマッテを使用すると、扱うクラスが多い場合に役立ちます

+1

ありがとうございました。それはうまくいくが、プロフェッショナルなことはしない。もっと良い解決策は、 'INotifyPropertyChanged'を実装した' Book'の複製を持ち、AutoMapperを使うか、あるいはタイプを変換するのと同様ですが、これは回避策です。私は堅牢なソリューションが必要な場合はそれが必要です – Emad

+1

はい、それもうまくいくだろうが、私は長いプロセスかもしれないと思ったが、あなたはAutoMapperについて言及した。あなたが正しい答えだと思うなら、他の人もそれを見つけることができるようにマークしてください:) – BraveHeart

+0

申し訳ありませんが、私は:) – Emad