0

シンプルなバインド メカニズムによってモデルから値と値のリストを表示できるシンプルな MVC アーキテクチャを備えたアプリ (Web や .net ではなくデスクトップ) があります。

モデルは、ツリー構造のスカラーおよび配列ノードです。一部のノードは生の値であり、一部のオブジェクトはメンバー サブノードを持ちます。

ビュー レベル バインディングの構文は次のようになります。

app_root.some_node.prices[1]  // single "price" object 
app_root.some_node.prices     // all "price" objects 

ここで、何らかの変換プロセスを実行した後に、これらの値を提示する必要があります。

例のために:ライブ通貨換算。つまり、単なるフォーマットよりも複雑で、失敗するか、アプリケーションの状態にある程度依存する可能性があるものです。

MVC システムとバインディング構文を正常に保ちながら、この機能を追加するにはどうすればよいでしょうか?

私が考えることができる2つの即時のオプションは次のとおりです。

// Fake "arguments" to a generic app-level converter node?
//
// Very hack-ish looking and now the app has a new 
// global "currency_converter" node.
//
app_root.currency_converter.euro.app_root.some_node.prices[1]
app_root.currency_converter.yen.app_root.some_node.prices[1]

// Ad-hoc extension to the "price" objects?
//
// Cleaner binding path, but now I need modify the "price" object for
// each new currency.  This also seems wrong.
//
app_root.some_node.prices[1].asEuro
app_root.some_node.prices[1].asYen // etc.

// Adding a post-fix converter option? 
//
// Still a cleaner binding path, but now there must exist some magic 
// conversion system/registry that the "As" sub-node must know how to talk to.
// 
app_root.some_node.prices[1].As.Euro
app_root.some_node.prices[1].As.Yen // etc.

より良い方法はありますか?

4

1 に答える 1

0

私は 2 番目のオプションを使用します。最初のオプションではコンバーターが肥大化するため、管理しなければならない多くのコンバーターが必要になるからです。

あなたがどのプラットフォームまたはテクノロジーで作業しているかはわかりませんが、他の人がどのようにそれを行ったかを見ると役立つ場合があります.MicrosoftのデスクトップアプリケーションスタックであるWPFを使用しており、次のようなフォーマットを使用できるバインディングオブジェクトがあります:

<Label Content={Binding Path=CurrentAmount, Format=Cost: {0:C}} />
                                            ^^^^^^^^^^^^^^^^^^

Bindingはここではオブジェクトであり、Format以外のパラメータの 1 つであるPathため、おそらくフレームワークに同様のものを実装できます。

編集: WPF が単純な書式設定を実行する方法を示しましたが、システムにはより複雑な変換の機能もあり、書式設定と同じ方法で適用できます。

以下は以前と同じサンプルですが、今回は変換が追加されています。

<Label Content={Binding Path=CurrentAmount, Format=Cost: {0:C}, Converter=myConverter />
                                                                ^^^^^^^^^^^^^^^^^^^^^

ご覧のとおり、コンバーター パラメーターも使用できます。myConverter は実際にはIValueConverter、ビュー レイヤーとモデルの間で値を相互に変換できる WPF インターフェイスを実装するクラスです。

于 2013-07-26T10:55:21.590 に答える