Альтернативным подходом было бы использование 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/
Посмотрите на это сообщение в блоге Josh Smith Первоначально Выбранный пункт при Привязке со Сгруппированным ICollectionView
Необходимо создать ViewModel, который имеет понятие IsSelected на нем и связывается со свойством IsSelected фактического ListBoxItem, который представляет его в Представлении с помощью стандартной архитектуры привязки WPF.
Затем в Вашем коде, который знает о Вашем ViewModel, но не том, что он представлен любым определенным Представлением, может просто использовать то свойство для обнаружения, какие объекты из Модели на самом деле выбраны независимо от выбора разработчиков для как его представленный в Представлении.
Решение Привлекло работы Болота очень хорошо, я рекомендую это. И у меня есть другое решение!
Образцовое Представление ViewModel является Пассивным Представлением, можно также использовать Модель Презентации для доступа к некоторым данным презентации, не будучи вместе с WPF (этот шаблон используется в примере Stocktrader ПРИЗМЫ).
Ответ Дрю Марша хорош, если у вас небольшой список, если у вас большой список, снижение производительности при нахождении всех выбранных вами элементов может быть неприятным! Мое любимое решение - создать присоединенное свойство в вашем ListBox, которое затем привязывается к ObservableCollection, содержащему выбранные вами элементы. Затем с помощью присоединенного свойства вы подписываетесь на событие SelectionChanged элементов для добавления / удаления элементов из вашей коллекции.
Вот еще один вариант шаблона View-Model-ViewModel, в котором ViewModel имеет доступ к представлению через интерфейс IView.
Я встречал довольно много сценариев, в которых вы не можете использовать Связывание WPF, а затем вам понадобится способ в коде для синхронизации состояния между View и ViewModel.
Как это можно сделать, показано здесь: