سؤال

أرغب في إنشاء بعض عناصر التحكم ديناميكيًا في تطبيق 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; }
}

ستكون كل "خاصية مخصصة" في النهاية عبارة عن 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؟إذا قمت بتحليل CustomProperties في ViewModel، واكتشفت عناصر التحكم التي يجب إنشاؤها، فكيف يمكنني إنشاء عناصر تحكم جديدة في طريقة العرض الخاصة بي بناءً على نمط MVVM.

  • هل هناك أي عنصر تحكم Silverlight يمكن أن يساعدني في جعل واجهة المستخدم أسرع؟

  • هل يمكنني تحديد التعليقات التوضيحية للبيانات برمجياً؟على سبيل المثال، بعد تحليل الخاصية المخصصة، هل يمكنني إضافة بعض التعليقات التوضيحية للبيانات (العرض والتحقق من الصحة) إلى الخاصية وربطها بـ DataForm أو PropertyGrid أو عنصر تحكم مفيد في هذا الموقف؟

شكرًا لك.

هل كانت مفيدة؟

المحلول

في هذه الحالات، عادةً ما تستخدم أحد عناصر التحكم الموروثة من ItemsControl (على سبيل المثال ListBox) أو ال 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 مجموعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top