0

優れた mvvmcross-library では、RIO バインディングを使用して読み取り不能なコードを防ぐことができます。

public INC<String>Title = new NC<String>();

次に、Title.Value を使用して値を読み書きできます。モデルをより読みやすくします。

通常、このプロパティは次のように記述されます。

    public string Title
    {
        get { return _title; }
        set
        {
            _title = value;
            RaisePropertyChanged("Title");
        }
    }

しかし、sqlite-net を使用したい場合、これらのフィールドはゲッターとセッターを備えた基本型ではないため、データベースにストリーミングできません。

それを回避するためのいくつかのオプションを考えることができます:

  1. モデルに似た新しい単純なオブジェクトを作成しますが、直接の db フィールドのみを使用します。そして、モデルに単純なインポート/エクスポートの静的メソッドを作成します。これにより、実際のデータベースに関連付ける必要のない複雑なモデル コードとの闘いを防ぐこともできます。
  2. sqlite-net が NC フィールドの読み取りを理解できるようにします。マッパーのコードを読み込んでみましたが、ゲッターセッターに依存しているので大変な作業になりそうです。ジェネリックである可能性のある型にカスタム マッピングを挿入する方法が見つかりませんでした。
  3. RIO を削除し、RIO に頼るのではなく、自分ですべてのコードを挿入します。

多分誰かがアドバイスを持っていますか?

4

1 に答える 1

1

ありがとうスチュアート。それはまさに私の考えだったので、そのように実装しました:私の(DB)モデルにはRIOが含まれていません。私のビューモデルだけがそうで、DB互換のモデルを参照しています。

したがって、後世のために次のヒントを参考にしてください。- ビューモデル内の参照モデル。バインディングでは、. (ドット) でこのモデルを参照します。

これにより、それらがうまく分離されます。これにより、別の利点も得られます。モデルを再利用する必要がある場合 (同じオブジェクトが画面に 2 回表示される可能性があるため)、状況が異なる場合、この状況を処理して既にインスタンス化されたモデルを見つける方がはるかに簡単です。

于 2013-08-12T08:46:20.607 に答える