2

事前定義されたフィールド定義の動的リストからデータ入力ビューを作成する方法を調査しています。「定義済み」とは、基本的なフィールド タイプが 8 つしかないことを意味します。Silverlight Toolkit の DataForm コントロールは、ほぼ必要なものですが、オブジェクトプロパティ(カスタム定義のリストではありません) を対象としています。

これを簡単にする既存のプロジェクトはありますか?私のデザインアイデアについてコメントしてください(下記)。Silverlight の使用経験は 2 週間程度です。

基本的な設計思想:

カスタム データ フィールド タイプを定義することを考えています。はIEnumerable<BaseDataField>UI によって受信され、列挙され、各フィールドのタイプに基づいてコントロールが作成されます。各フィールドは、説明付きのラベルをBooleanDataField作成し、CheckBoxLookupDataFieldを作成し、ComboBox などを作成します。

アイデアを明確にするための擬似コード:

public abstract class BaseDataField {
    public string FieldCode { get; private set; }
    public string FieldDescription { get { return FieldDefinitions.Instance.FieldDescription(FieldCode); } }
    ...
}

public class StringDataField : BaseDataField
public class BooleanDataField : BaseDataField
public class CurrencyDataField : BaseDataField
public class IntegerDataField : BaseDataField
public class NumericDataField : BaseDataField
public class DateTimeDataField : BaseDataField
public class LookupDataField : BaseDataField
public class SpecialDataField : BaseDataField

これは、フィールドをバインド可能にするために拡張されます。各タイプのカスタム コントロールを指定できます。検証フィードバックがあります。

Silverlight で簡単に実行できますか、それともカスタム コントロールを作成する必要がありますか?

注: このプログラムは、既存の多層 LOB プラットフォームの Web UI になります。すべてのデータは、JSON ベースの REST サービスからシリアル化されます。

ありがとう!

4

2 に答える 2

2

DataForm クラスをソリューションに組み込むことを強くお勧めします。実際にカスタム コントロールを処理できます。私は何年もの間、理想的な最小限の xaml データ フォームという目標を追い求めてきましたが、最終的に、DataForm の組み込み機能と DataField から派生したカスタム フィールドの優れた組み合わせであると思うものに落ち着きました。たとえば、DataField を拡張して、Content プロパティが指定されていない場合に TextBox を自動的に使用するようにして、XAML を最小限に抑えました。DataForm がネイティブにサポートしていないように見える DisplayFormatAttribute のサポートも追加しました。

とにかく、最初にできることは、上記で説明したように一連のサブクラスを作成し、DataField から派生させることです。次に、OnApplyTemplate メソッドで、データを表す要素を作成します。例えば:

class BooleanDataField : DataField {

    protected override void OnApplyTemplate() {

        if (this.Content == null) {
            var check = new CheckBox();
            check.SetBinding(CheckBox.IsCheckedProperty, 
                new Binding(this.PropertyPath));
            this.Content = check;
        }

        base.OnApplyTemplate();
    }

}

フィールド メタデータを DataForm によってロードする方法については、いくつかのオプションがあります。AutoGeneratingField イベントを処理して、その場で使用する適切なフィールドを検索するか、自動フィールド生成を無効にして独自にロードすることができます。

于 2010-01-26T08:53:39.573 に答える
0

私たちは DataForm から始めましたが、最終的にはそれを便利にするすべてのものを上書きすることになり、まだいくつかの問題がありました。私はこの試みから多くのことを学び、最終的にはこの仕事のためのカスタム コントロールを作成しました。残念ながら、このソリューションはあまり拡張可能ではありません...

于 2010-03-30T18:44:43.223 に答える