2012-04-22 3 views
0

В моем приложении я пишу много форм типа ввода данных, и я пришел к выводу, что мне нужно сделать это немного проще. После некоторого чтения, кажется, это можно сделать с помощью подкласса ItemsControl для представления формы.Использование свойств WPF для компоновки формы LOB

Я сделал это, и теперь есть что-то вроде

<MySubClassedForm></MySubClassedForm> 

, что я хотел бы сделать сейчас установить вложенное свойство сказать «LabelText», так что он может быть использован на любом контроле внутри.

В качестве примера,

<MySubClassedForm> 
<TextBox MySubClassedForm.LabelText="Surname" /> 
<Image MySubClassedForm.LabelText="LabelText" /> 
</MySubClassedForm> 

Прикрепленный определение свойства: -

public static DependencyProperty LabelTextProperty = DependencyProperty.RegisterAttached("LabelText", typeof(string), typeof(MySubclassedForm), 
     new UIPropertyMetadata(string.Empty)); 

     public string LabelText 
     { 
      get { return (string)GetValue(LabelTextProperty); } 
      set { SetValue(LabelTextProperty, value); } 
     } 

я начал, поставив вложенное свойство на MySubClassedForm и я получаю следующее сообщение об ошибке: -
Прилагаемый собственности «MySubClassedForm.LabelText» не определен в «TextBox» или одном из его базовых классов.

Просьба сообщить, что я делаю неправильно, и что мне нужно сделать, чтобы сделать эту работу?

Спасибо Alex

+0

Как вы описали прикрепленное свойство? Отправьте код. – Clemens

+0

Привет, я хотел включить это, но забыл. Редактировал мой вопрос, чтобы включить его сейчас. – lostinwpf

ответ

1

Вы должны были бы определить статические методы получения и установки:

public static readonly DependencyProperty LabelTextProperty = 
    DependencyProperty.RegisterAttached(
     "LabelText", typeof(string), typeof(MySubclassedForm), 
     new UIPropertyMetadata(string.Empty)); 

public static string GetLabelText(DependencyObject obj) 
{ 
    return (string)obj.GetValue(LabelTextProperty); 
} 

public static void SetLabelText(DependencyObject obj, string value) 
{ 
    obj.SetValue(LabelTextProperty, value); 
} 

Дополнительную информацию можно получить здесь Custom Attached Properties.

+0

Это трюк. Большое спасибо. – lostinwpf

0

Вы должны взглянуть на magellan Это имеет как WPF формирует двигатель и отличную основу MVC. Либо можно использовать без другого.

Это позволяет сделать

<Form> 
    <Field For="{Binding Path=Server.Server}" /> 
    <Field For="{Binding Path=Server.CachedExchangeMode}" /> 
    <Field For="{Binding Path=Server.Username}" /> 
    <Field For="{Binding Path=Server.SecurityMode}" /> 
</Form> 

, который будет автоматически генерировать соответствующие типы входных полей для свойств на вашем ViewModel.