4

次の質問があります。ViewModel 内のいくつかの要素を別々にバインドしたい場合、ロジックの予想されるシナリオは何ですか。つまり... http://slodge.blogspot.co.uk/2013/04/n3-kitten-cells-on-iphone-n1-days-of.html

提供されているサンプルには「Kitten」クラスがあります。これは単なる一般的な「DTO」オブジェクトです。また、これらのオブジェクト リストを含むモデルビュー クラスもあります。

public List<Kitten> Kittens
{
    get ...
    set { ... RaisePropertyChanged(() => Kittens); }
}

グリッドをセル (子猫のプロパティにバインド) にバインドできます。しかし、Kitten のすべてのプロパティで RaisePropertyChanged を個別にアクティブ化できるようにしたい場合はどうすればよいでしょうか? つまり、子猫のタイトルが変更された場合、KittenTitle プロパティで RaisePropertyChanged を呼び出す (したがって、リスト全体を更新するのではなく、バインドされたセル値のみを変更する) (たとえば)?

Kittens を使用したサンプルは明らかに原始的であり、そのような実装は必要ありませんが、Kittens の代わりに、Facebook アプリのメニュー パネルに似たリストがあり、そこにメニュー アイテム (量はさまざま) があり、それらのアイテムに " Notifications Count」ラベル(またはできない)なので、リストを完全に更新する代わりに、そのラベルのみを更新するにはどうすればよいですか(「Kitten」インスタンス内の関連プロパティが変更されたために発生します)?(私にはviewModel内のviewModelのように見えますが、MvvmCrossでよりスマートに解決する方法がわかりません)。

ありがとうございました!

4

1 に答える 1

3

ネストされたオブジェクトを実装できINotifyPropertyChangedます - Windows バインディングで行うのとまったく同じです。

したがって、ある子猫がそのプロパティを変更した場合、その子猫の UI のその部分のみが更新されます。

たとえば、Kitten は次のように記述できます。

public class DynamicKitten : MvxNotifyPropertyChanged // can use MvxViewModel as base class if preferred
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; RaisePropertyChanged(() => Name); }
    }
}

このいくつかの例については、主に Linq を使用して静的オブジェクトをラップします。以下を参照してください。

私のお気に入りの StackOverflow ライブラリの 1 つは、この INPC アプローチを Json レイヤーにまでさかのぼります。 Answer.cs

于 2013-06-05T12:24:34.680 に答える