2014-01-09 4 views
0

Я использую Pivot Control в Windows Phone 8, и я использую MVVM Light.MVVM Light - ViewModel reusage

Я создал UserControl, который будет содержимым каждого PivotItem и ViewModel, который должен использовать мой UserControl.

Например:

ObservableCollection<PivotItem> Pivots = new ObservableCollection<PivotItem>(); 
    for (i = 0; i < length; i++) { 
     Pivots.Add(new PivotItem() { Content = new MyUserControl() }); 
    } 

и обычно в моем UserControl конструктор у меня есть что-то вроде этого (который я думаю, что это не очень хорошая pratice?):

DataContext = new ViewModelLocator().MyViewModel; 

Это ViewModel закачает данные база данных на основе ключа позиции. Мой вопрос в том, как передать этот ключ в MyViewModel и не сделать MyViewModel Singleton?

ответ

0

Прежде всего - вам не следует создавать новые экземпляры ViewModelLocator. Существует один корень , который автоматически добавляется на вашу страницу App.xaml в элементе App.Resources. Вы можете ссылаться на него в XAML как {StaticResource Locator} или как App.Resources ["Locator"] в коде.

Secod вопрос - как вы есть несколько шарниров и хотите несколько экземпляров отчетливый View Model, лучшее, что вы, вероятно, могли бы сделать, это НЕ добавить MyViewModel вид модели в ViewModelLocator и просто создать его там на лету. Таким образом, вы не будете иметь его как синглтон, и это именно то, что вы хотите. Таким образом, вы не потеряете функциональность MVVM Light, просто нужно будет воссоздать и восстановить данные каждый раз, когда создаются элементы управления.

Если «ключи», которые вы используете для извлечения данных, из ограниченного набора, однако (так что будет что-то вроде 5 из них не 100) и хотите, чтобы данные сохранялись после первой загрузки, вы можете зарегистрировать MyViewModel в конструкторе ViewModelLocator в нормально

SimpleIoc.Default.Register<MyViewModel>(); 

И затем в использовании кода следующий синтаксис:

SimpleIoc.Default.GetInstance<MyViewModel>("somekeyvalue"); 

Это будет сравнить прилагаемое значение ключа с SimpleIoc вНУТРЕННЕГО словарь существующих моделей представлений и в случае его существования вернет существующий экземпляр, в противном случае он создаст новый и сохранит его под ключом для последующего повторного использования.

+0

Спасибо за ваш ответ. Тогда я создам ViewModels «на лету». , но как получить ссылку для ViewModelLocator в сборке Windows Phone Class, где я использую mvvm light? – rdon

+0

Я имею в виду, как получить ссылку для ViewModelLocalor в библиотеке Windows Phone Class, где я использую mvvm light? – rdon

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