WPF C # Как я могу использовать общую ObservableCollection в двух ViewModels? - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть вопрос о том, как я могу использовать общую ObservableCollection в двух ViewModels в WPF C #?

Я получил два представления, первое представление состоит из наблюдаемой коллекции категорий, используемых в выпадающем списке в той или иной форме.Второй вид - это окно, которое позволяет добавлять, редактировать и удалять категории.Теперь я извлекаю категории для обоих представлений по отдельности, но я хочу объединить и использовать общую наблюдаемую коллекцию, чтобы получать новые изменения при добавлении, изменении или удалении категорий во втором представлении.

Обе модели View и viewmodels контролируются основной моделью:

    public viewModel1 viewModel1 { get; set; }
    public ViewModel2 ViewModel2 { get; set; }

    public MainViewModel()
    {
        this.InitializeCommands();
        this.viewModel1 = new viewModel1();
        this.ViewModel2 = new ViewModel2();


        this.ViewModel2.OnChangedCategory += (s, e) =>
        {
            this.viewModel1.Categories = GetCategories();
        };
    }

ViewModel для View1:

public ObservableCollection<Categories> GetCategories
    {
        get
        {
            if (this._getCategories == null)
            {
                this._getCategories = methods.GetCategories();
            }

            return this._getCategories ;
        }
        set
        {
            if (this._getCategories != value)
            {
                this._getCategories = value;
                this.OnPropertyChanged("GetCategories");
            }
        }
    }

ViewModel для View2:

public ObservableCollection<Categories> GetCategories
    {
        get
        {
            if (this._getCategories == null)
            {
                this._getCategories = methods.GetCategories();
            }

            return this._getCategories ;
        }
        set
        {
            if (this._getCategories != value)
            {
                this._getCategories = value;
                this.OnPropertyChanged("GetCategories");
            }
        }
    }

Теоретически ониоба идентичных, просто две разные наблюдаемые коллекции в двух моделях представления, я хочу использовать одну и ту же наблюдаемую коллекцию в обоих представлениях, если это в первом или втором ViewModel не имеет значения.Но, может быть, это имеет больше смысла, если он находится в viewmodel 2. Скажем, если я решу иметь общую коллекцию категорий, наблюдаемую в ViewModel 2, как Viewmodel 1 может использовать эту наблюдаемую коллекцию из ViewModel 2 и по-прежнему синхронизироваться при изменениях?

Как я могу это сделать?

1 Ответ

0 голосов
/ 19 ноября 2018

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

https://social.technet.microsoft.com/wiki/contents/articles/29859.wpf-tips-bind-to-current-item-of-collection.aspx

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