2012-07-19 2 views
0

Пожалуйста, помогите мнеПростой пользовательский контроль и шаблон MVVM: как использовать?

У меня есть

public partial class OrderControl : UserControl 
{ 
    private OrderHeader orderHeader; 
    public Customer selectedCustomer { get; set; } 
    private Customer[] allCustomers; 
    public User selectedManager { get; set; } 
    private User[] allManagers; 


    public OrderControl() 
    { 
     InitializeComponent(); 
     DataContext = this; 
    } 
... 
} 

И мне нужен один способ привязки к источнику:

<ComboBox Name="CustomerComboBox" SelectedItem="{Binding selectedCustomer}"/> 

Является ли это лучший способ сохранить selectedCustomer собственности в OrderControl.xaml.cs или I нужно создать некоторый класс OrderViewModel с .., selectedCustomer, ... Свойства и сохранить экземпляр OrderViewModel в OrderControl.xaml.cs?

благодаря

ответ

0

Лучше создать класс ViewModel, перемещать свойства этого класса и сделать его DataContext вашего UserControl.

Кроме того, ваше selectedCustomer свойства просто обычный .NET свойство и его нужно поддерживать INotifyPropertyChanged интерфейса для того, чтобы облегчить связывания и изменения уведомления ... обычно базу ViewModel класса, от которого всех ваших других ViewModel классов наследуют бы это реализовать интерфейс ...

+0

Свойство не должно быть DependencyProperty, это нормально, если он помещает его в ViewModel, чтобы связать его таким образом с его ComboBox. Ему необходимо внедрить INotifyPropertyChanged для предоставления уведомлений. – Mark

+0

@Mark, вы правы, ему не нужно быть DP ... обычно базовый класс ViewModel реализует INotifyPropertyChanged ... –

+0

Но если вы назначаете viewmodel UsersControl своим собственным DataContext, тогда это прерывает привязки, сделанные в родительском элементе управления, который составляет UserControl. В частности, привязки, сделанные в собственном родительском элементе управления, затем будут разрешаться в собственной viewmodel UserControl вместо модели представления родителя, что является неожиданным и требует беспорядочных обходных решений. – Neutrino

0

Это будет работать, если вы реализуете INotifyPropertyChanged. Прямо сейчас нет возможности для combobox получать обновления, когда свойство установлено. См. http://msdn.microsoft.com/en-us/library/ms229614.aspx

Однако, если вы хотите следовать MVVM, вам нужно создать объект модели представления.

+0

Зачем OP должен реализовывать INotifyPropertyChanged, поскольку все потребности OP - односторонняя привязка к источнику. Я согласен, если OP захочет привязать OneWay или TwoWay, INotifyPropertyChanged должен быть реализован, но не в этом случае. – Thelonias

0

, если вы хотите создать реальные UserControls вы не должны:

DataContext = this; 

здесь цитата из H.B.

Это плохая практика, установка DataContext как это невидимое «извне» и непрактично наследования DataContext , как правило, то, что вы хотите, и ожидать

here является подобен вопрос ответ.

но если вы хотите MVVM с видоммодель первый.

цитата из Рахиль:

Помните, что с MVVM ваши ViewModels ваши приложение. Просмотр - это довольно приятный интерфейс, который позволяет пользователям взаимодействовать с вашими проекциями ViewModels.

Это означает, что вы должны создать соответствующие модели с любыми свойствами и командами, которые вам нужны. удалите весь код из usercontrol, потому что теперь это просто представление. viewmodel сначала соединяет viewmodel и представление через datatemplates.

+0

thanks blindmeis – artos

Смежные вопросы