1

Silverlight アプリケーションのビュー モデルのプロパティにバインドされたデータフォームがあります。WCF RIA サービスを使用してエンティティ クラスを作成しました。すべてのプロパティには、データフォームのデータ フィールド ラベルに表示される DisplayName の属性があります。作成するカスタム データ フィールドのすべてのラベルの末尾に「:」を追加する必要があります。これが必要な理由は、現在のオブジェクト (従業員など) のリストにバインドされているグリッドがページにあり、グリッド ヘッダーの末尾に「:」が必要ではないためです。 「:」新しい従業員を編集または追加しようとすると。

これは私がこれまで行ってきたことですが、うまくいきません。

public class CustomDataField : DataField
{
    public CustomDataField()
    {

    }

    public new object Label
    {
        get { return base.Label; }
        set 
        { 
            base.Label = value;
            if( value is string )
            {
                base.Label = (string)value + ":";
            }
        }
    }
}
4

1 に答える 1

1

(1)

DataFormにフィールドの自動生成を許可しない場合は、フィールドをより細かく制御でき、ラベルを手動で設定できます。

<tkt:DataForm AutoGenerateFields="False" AutoEdit="True">
    <tkt:DataForm.EditTemplate>
        <DataTemplate>
            <StackPanel>
                <tkt:DataField Label="SomeLabel:">
                    <TextBox Text="{Binding SomeProperty, Mode=TwoWay}" />
                </tkt:DataField>

                [...]

            </StackPanel>
        </DataTemplate>
    </tkt:DataForm.EditTemplate>
</tkt:DataForm>

(2)

自動生成機能が必要であるが、フィールドの表示方法をさらに制御する必要がある場合は、DataFormを独自のカスタムコントロールにラップできます。DataFormに割り当てる独自のEditTemplateを作成するには、自動生成を自分で実装する必要があります。これが私が通った道です。

(3)

もう1つの手っ取り早い方法は、DataFormがラベルを変更するためにレンダリングした後、ビジュアルツリーを反復処理することです。ツールキットの助けを借りれば、これは非常に簡単です。

// needs System.Windows.Controls.Toolkit.dll

using System.Linq;
using System.Windows.Controls.Primitives;

foreach (var field in myDataForm.GetVisualDescendents().OfType<DataField>())
{
    field.Label = field.Label + ":";
}

(4)

最後に、DataFormにAutoGeneratingFieldイベントがあり、機能する可能性があることを確認しました(テストされていません)。

myDataForm.AutoGeneratingField += (sender, e) => e.Field.Label = e.Field.Label + ":";
于 2011-01-08T15:22:52.017 に答える