Как получить доступ к списку в ViewModel из разных ViewModel - PullRequest
0 голосов
/ 28 января 2020

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

public List<ContactsListModel> ExampleList
{
    get => _exampleList;
    set
    {
        _exampleList = value;
        PropertyChanged(this, new PropertyChangedEventArgs(nameof(ExampleList)));
    }
}

Выше у меня есть мой список, который содержит некоторые данные. Я не хочу загружать это еще раз. Как я могу получить значения из него в другой viewModel?

Ответы [ 2 ]

0 голосов
/ 29 января 2020

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

Я использую MVVM Light, и там есть возможность использовать контейнер SimpleIo c. Просто зарегистрируйте ваши ViewModel и получите уникальные экземпляры вашей ViewModel в любом месте.

Мои ViewModels зарегистрированы в классе ViewModelLocator, как показано ниже.

public LoginViewModel LoginVM
{
    get
    {
        if (!SimpleIoc.Default.IsRegistered<LoginViewModel>())
        {
            SimpleIoc.Default.Register<LoginViewModel>();
        }
        return SimpleIoc.Default.GetInstance<LoginViewModel>();
    }
} 

И у меня в App.cs есть свойство под названием Locator, как показано ниже.

public static ViewModelLocator Locator
{
    get { return _locator ?? (_locator = new ViewModelLocator()); }
}

Так что теперь, где бы ни требовалось, я могу получить доступ к ViewModel, как показано ниже.

App.Locator.LoginVM.[PropertyName] = [values to assign];
0 голосов
/ 28 января 2020

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

1. Модель просмотра, к которой вы хотите получить доступ:

Pushasync(new YourPage(this));  //Passed the instance of your view model

2. Страница, на которой вы хотите получить доступ:

public partial class DemoClass
{
    YourViewModel demo_;

    public DemoClass()
    {
        InitializeComponent();
    }

    public DemoClass(Yourviewmodel demo)
    {
        InitializeComponent();
        demo_ = demo;  // access the instance and all its properties
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...