WPF M-V-VM: Получить выбранные пункты от ListCollectionView?

Альтернативным подходом было бы использование Vuex для управления состоянием.

const store = new Vuex.Store({
  state: {
    notifications: []
  },
  mutations: {
    load (state, notifications) {
      state.notifications = notifications
    }
  },
  actions: {
    load (context) {
      Vue.$http.get('/notifications').then(response = {
        context.commit('load', response.data);
      })
    }
  }
});

// Notifications.vue
new Vue({
  mounted () {
    // you will want to add more than just an interval. You will want to keep track of this and perhaps stop it if, for example, the user logs out.
    setInterval(function () {
      store.dispatch('load');
    }.bind(this), 1000)
  }
});


// Add to your router
metaInfo: function () {
  return {
    title: '(' + store.state.notifications + ')' + 'Leads - ' + this.view
  }
}

Это был быстрый пример того, как использование Vuex решит эту проблему. Это не проверено и предназначено только для образовательных целей. Узнайте больше на https://vuex.vuejs.org/guide/

16
задан Sam 16 January 2009 в 20:00
поделиться

6 ответов

1
ответ дан 30 November 2019 в 21:46
поделиться

Необходимо создать ViewModel, который имеет понятие IsSelected на нем и связывается со свойством IsSelected фактического ListBoxItem, который представляет его в Представлении с помощью стандартной архитектуры привязки WPF.

Затем в Вашем коде, который знает о Вашем ViewModel, но не том, что он представлен любым определенным Представлением, может просто использовать то свойство для обнаружения, какие объекты из Модели на самом деле выбраны независимо от выбора разработчиков для как его представленный в Представлении.

12
ответ дан 30 November 2019 в 21:46
поделиться

Решение Привлекло работы Болота очень хорошо, я рекомендую это. И у меня есть другое решение!

Образцовое Представление ViewModel является Пассивным Представлением, можно также использовать Модель Презентации для доступа к некоторым данным презентации, не будучи вместе с WPF (этот шаблон используется в примере Stocktrader ПРИЗМЫ).

1
ответ дан 30 November 2019 в 21:46
поделиться

Ответ Дрю Марша хорош, если у вас небольшой список, если у вас большой список, снижение производительности при нахождении всех выбранных вами элементов может быть неприятным! Мое любимое решение - создать присоединенное свойство в вашем ListBox, которое затем привязывается к ObservableCollection, содержащему выбранные вами элементы. Затем с помощью присоединенного свойства вы подписываетесь на событие SelectionChanged элементов для добавления / удаления элементов из вашей коллекции.

1
ответ дан 30 November 2019 в 21:46
поделиться

Вот еще один вариант шаблона View-Model-ViewModel, в котором ViewModel имеет доступ к представлению через интерфейс IView.

Я встречал довольно много сценариев, в которых вы не можете использовать Связывание WPF, а затем вам понадобится способ в коде для синхронизации состояния между View и ViewModel.

Как это можно сделать, показано здесь:

WPF Application Framework (WAF)

0
ответ дан 30 November 2019 в 21:46
поделиться
0
ответ дан 30 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: