4

XAMLのUIオブジェクトに表示されるデータ型のWPFバインディングと変換について質問があります。

さまざまなアプリケーションで再利用したいユーザーコントロールがあります。ユーザーコントロールは、サムネイル画像といくつかのTextBlockを表示して、名前や住所などの個人の人口統計情報を表示します。ユーザーコントロールはMVVMデザインで使用されるため、ユーザーコントロールに固有のViewModelにバインドされます。

典型的なMVVMの設計原則に従って、ユーザーコントロールのViewModelは、より大きなUIを構成するために、他のViewModelに埋め込まれることがよくあります。

ユーザーコントロールビューモデルは、バインディングオブジェクトとして特定のタイプ(クラス)を想定しています。ただし、UCのVMが埋め込まれているViewModelは、まったく異なるオブジェクトモデルを持っているため、データをUCのVMに単純に渡すことはできません。親VMのデータモデルをUCVMのデータモデルに変換する必要があります。

私の質問はこれです:この変換を実行するための認可された方法はありますか?

IValueConverterとIMultiValueConverterを見ましたが、これらは進むべき道のようには見えません。

必要なのは、親VMと組み込みUC VMの間の一種のシムであり、親VMのデータがUCVMに必要な形式に変換されると思います。

または、基本的に、親VMが提供するタイプを処理するためにカスタムUC VMを作成する必要がありますか?

4

4 に答える 4

2

私はケンに同意します。彼には答えがあると思います。共通のユーザー コントロールに渡したいデータの構成が n 個ある場合、そのデータの構成の所有者は、データの構成をユーザー コントロールにバインドされる共通の形式に変換する必要があります。

コントロールを使用する各ビューには、共通の形式でプロパティを公開する対応するビュー モデルがあります。

public class SampleViewModel {
   ...

    IUserControlData ControlData 
    { 
       get 
       {
          // Do conversion here or do it early and cache it.
       }
    }

   ...
}

次に、そのプロパティをビューのユーザー コントロールにバインドします。

<common:CommonUserControl DataContext={Binding Path=ControlData} ... >
于 2009-04-20T03:09:19.717 に答える
1

親 VM が子 VM のスーパーセットである場合、通常、親 VM は子 VM への参照を保持するだけです。その参照をプロパティとして公開し、ContentControl(またはその他のもの) をそのプロパティにバインドします。

これで問題は解決しませんか?

于 2009-04-06T20:17:08.487 に答える
0

型変換が本当に必要な場合は、値コンバーターがまさに使用したいものです。とはいえ、通常、IValueConverter などによって処理される変換の種類は比較的単純で直接的です。

ただし、最上位/親/管理ユーザー コントロールが、実際のコンテンツをホストするユーザー コントロールに対して、より大きな型の断片を解析する必要がある場合、それはその最上位コントロールの仕事です。これらすべてを XAML で行うことに夢中にならないでください。必要なものを解析して、これらの子コントロールのプロパティを直接設定しても問題ありません。

于 2009-04-19T17:55:03.153 に答える
0

おそらくあなたが探しているものではありませんが、これは DataGrid 動的列のソリューションです。datagrid を使用すると、パラメーターを渡すことができます。 http://www.codeproject.com/Articles/36496/Binding-a-Silverlight-DataGrid-to-dynamic-data-Part-2-editable-data-and-INotifyPropertyChanged.aspx

于 2011-02-07T23:27:53.530 に答える