3

Silverlight アプリケーションでいくつかのコントロールを動的に生成したいと考えています。
より明確にするために、これが私のクラスの単純化された定義です。

public class TestClass
{
    [Display(Name="First Name")]
    public string FirstName { get; set; }

    [Display(Name = "Last Name")]
    public string LastName { get; set; }

    public List<CustomProperty> CustomProperties { get; set; }
}

各「CustomProperty」は、最終的に TextBox、CheckBox、または ComboBox になります。

public class CustomProperty
{
    public CustomDataType DataType { get; set; } //enum:integer, string, datetime, etc
    public object Value { get; set; }
    public string DisplayName { get; set; }
    public string Mappings { get; set; } // Simulating enums' behavior.
}
  • MVVMパターンを使用してこれを実装する最良の方法は何ですか? ViewModel で CustomProperties を解析し、作成する必要があるコントロールを見つけた場合、MVVM パターンに基づいてビューに新しいコントロールを作成するにはどうすればよいですか。

  • UI の高速化に役立つ Silverlight コントロールはありますか?

  • データ注釈をプログラムで定義できますか? たとえば、カスタム プロパティを解析した後、いくつかのデータ注釈 (表示、検証) をプロパティに追加して、DataForm、PropertyGrid、またはこの状況で役立つコントロールにバインドできますか?

ありがとうございました。

4

1 に答える 1

3

このような場合、通常はItemsControl(たとえばListBox)から継承するコントロールの1つを使用するか、ItemsControl直接使用します。から継承するコントロールをItemsControl使用すると、コレクション内の各アイテムのテンプレートを定義できます。たとえば、サンプルを使用します(TestClassビューモデルを介してにアクセスできると仮定します)。

<ListBox ItemsSource="{Binding TestClass.CustomProperties }">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <!--DataContext is stet to item in the ItemsSource (of type CustomProperty)-->
            <StackPanel>
                <TextBlock Text="{Binding DisplayName}"/>
                <TextBox Text="{Binding Value}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

このスニペットは、コレクション内ListBoxのそれぞれのラベルとテキストボックスを含むを作成CustonPropertyしますCustomProperties

于 2011-09-14T05:13:18.337 に答える