1

C#/WPF/MVVM アプリケーションでパラメーターを表示および編集する可能性を評価しています。現在、 WPF Woolkit ExtendedTelerikDevExpress、およびSyncfusionのカスタム コントロールをいくつか調べています。PropertyGrid または DataGrid のようなコントロールの 2 つのオプションが表示されます。

問題: 私のパラメーター コンテンツはコレクション内にあり、PropertyGrids はそれらを好まないようです。プロパティを持つオブジェクトにバインドされるのが好きです。一方、私のパラメーターには異なる値の型があり、これはデータ グリッドが好まないものです。列には常に同じ値エディター (チェック ボックス、日付ピッカーなど) があります。

コレクションへのバインドと行ごとの個々の値エディターをサポートする信頼できるコントロールを知っている人はいますか?

その他の要件は、階層データ表現、検証、および検索機能です。

4

2 に答える 2

1

しばらく調査した結果、すべてのフレームワークが個々のセル エディターを列に適用できることがわかりました。

これは通常、列定義で行われます。グリッドにはColumnsコレクションがあります。各列は、最初の問題の鍵であったCellTemplateSelectorを設定できます。

これは Telerik グリッド ビューの小さなスニペットですが、私が判断できる限り、CellTemplateSelector まではすべて同じように動作します。もちろん、サードパーティの UI ライブラリのすべてのベンダーは、WPF DataGridの動作をコピーしたようです。

<telerik:RadGridView x:Name="radGridView" 
                          AutoGenerateColumns="False">
<telerik:RadGridView.Columns>
   <telerik:GridViewDataColumn DataMemberBinding="{Binding Name}" Header="Parameter" />
   <telerik:GridViewDataColumn DataMemberBinding="{Binding Value}" Header="Value">
      <telerik:GridViewDataColumn.CellTemplateSelector>
         <telerik:ConditionalDataTemplateSelector>
            <telerik:DataTemplateRule Condition="PropertyId &lt; 1">
               <DataTemplate>
                  <TextBox Text="{Binding Value, StringFormat=c}"/>
               </DataTemplate>
            </telerik:DataTemplateRule>
            <telerik:DataTemplateRule Condition="PropertyId > 0">
               <DataTemplate>
                  <CheckBox IsChecked="{Binding Value}" />
               </DataTemplate>
            </telerik:DataTemplateRule>
         </telerik:ConditionalDataTemplateSelector>
      </telerik:GridViewDataColumn.CellTemplateSelector>

   </telerik:GridViewDataColumn>
</telerik:RadGridView.Columns>

この例では、グリッドの ItmesSource は、NameValue、およびPropertyIdプロパティを含むビュー モデルにバインドされています。PropertyIdに基づいて、コントロールが選択されます。Telerik コントロールについて私が気に入っている点は、 ConditionalDataTemplateSelectorがそのフレームワークで使用できるため、コード ビハインドが必要ないことです。MVVM がビューにコード ビハインドをクリーンに保つ方が良いと思います。

アップデート:

Syncfusionから回答を受け取りました。彼らは次のように述べています。

1 つの列に異なるセル エディターをロードできます。そのためには、dataGrid.Model.QueryCellInfo も処理する必要があり、データに基づいて CellType を変更する必要があります。コードビハインドを避けることはできません。しかし、これはビヘイビアーを使用して実現できます。

于 2013-04-18T11:04:29.293 に答える
1

DataGridを使用してDataGridTemplateColumn、その列の各セルに適用されるテンプレートを指定できます。このテンプレートには、UserControl定義した を含めることができます。これは、そのテンプレートを分析しDataContextて適切なコントロールを表示します。(ただし、これはかなりの作業になるため、すぐに使用できるソリューションが存在する場合は、代わりにそれを使用する必要があります。)

于 2013-04-11T09:06:08.513 に答える