передача данных в пользовательский контроль mvvm - PullRequest
0 голосов
/ 03 марта 2012

Я пишу форму в WPF / c # с шаблоном MVVM и пытаюсь поделиться данными с пользовательским элементом управления. (Ну, модель представления пользовательских элементов управления)

Мне либо нужно:

  1. Создайте модель View у родителей и свяжите ее с пользовательским элементом управления
  2. Свяжите определенные классы с моделью представления в Xaml
  3. Имейте в виду, что пользовательские элементы управления не подходят для MVVM, и их нужно толкать в правильном направлении. (Я видел шаблоны данных, но они не казались идеальными)

Пользовательский контроль используется только для того, чтобы сделать большие формы более удобными в управлении, поэтому я не уверен, что так будет с MVVM, просто я делал это в прошлом.

Я хотел бы передать класс виртуальной машины в Xaml.

<TabItem Header="Applicants">
     <Views:ApplicantTabView>
         <UserControl.DataContext>
             <ViewModels:ApplicantTabViewModel Client="{Binding Client} />
         </UserControl.DataContext>
     </Views:ApplicantTabView>
 </TabItem>
public ClientComp Client
    {
        get { return (ClientComp)GetValue(ClientProperty); }
        set { SetValue(ClientProperty, value); }
    }

public static readonly DependencyProperty ClientProperty = DependencyProperty.Register("Client", typeof(ClientComp),
                                                                           typeof(ApplicantTabViewModel),
                                                                                       new FrameworkPropertyMetadata
                                                                                           (null));

Но я не могу получить свойство зависимости, чтобы принимать нестатический контент.

Это было проблемой для меня некоторое время, но предполагалось, что я узнаю, но потерпел неудачу, так что я здесь.

Заранее спасибо, Oli

Ответы [ 2 ]

4 голосов
/ 04 марта 2012

Oli - это нормально (на самом деле - рекомендуется) разделить части представления на UserControl, если пользовательский интерфейс стал слишком большим, - и независимо вы можете разделить модели представления на модели подвидов, если виртуальная машина стала слишком большой.

Похоже, что вы выполняете двойную инстанциюцию своей подвиртуальной машины.Также нет необходимости создавать свойство зависимости в вашей виртуальной машине (на самом деле, я думаю, что это неправильно).

В вашей внешней виртуальной машине просто установите ClientComp обычным свойством.Если вы не намереваетесь его изменять - установщик даже не должен запускать событие изменения свойства, хотя это рекомендуется.

public class OuterVm
{
    public ClientComp Client { get; private set; }

    // instantiate ClientComp in constructor:
    public OuterVm( ) {
        Client = new ClientComp( );
    }
}

Затем в XAML поместите ApplicantTabView и выполните привязкуего контекст данных:

...
<TabItem Header="Applicants">
    <Views:ApplicantTabView DataContext="{Binding Client}" />
</TabItem>
2 голосов
/ 04 марта 2012

Я недавно ответил на тот же вопрос, что и ваш: передача значения выбранного элемента gridview в другую ViewModel другого Usercontrol

По сути, настройка свойства зависимостей, которое позволяет данные из вашего родительского представлениячтобы сохранить контроль над вашим ребенком.Абстрагирование вашего взгляда на конкретные пользовательские элементы управления и их зацепление с использованием свойств зависимостей вместе с шаблоном MVVM на самом деле довольно мощное и рекомендуется для разработки Silverlight / WPF, особенно когда вступает в игру модульное тестирование.Дайте мне знать, если вам нужны дополнительные разъяснения, надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...