Есть задача, написать диспетчер задач на с# с патерном mvvm. У меня возникла проблема с привязкой. Фишка в том что если я напрямую бинжу к Process.GetProcesses() через ObjectDataProvider то список процессов не обновляется. Проблема в обновлении именно. Подскажите,как его привязать правильно? Еще интересно, как его можно отсортировать? Ну, список. Не нарушая mvvm.
Если вы планируете через свою программу убивать процессы, то вам нужно использовать не List<string>
как у меня, а ObservableCollection<string>
и еще добавить свойство для SelectedItem
.
public class MainViewModel : INotifyPropertyChanged, IDisposable
{
public event PropertyChangedEventHandler PropertyChanged;
private Timer _timer;
//ctor
public MainViewModel()
{
LoadProcesses();
RunTimer();
}
private List<string> _Processes = new List<string>();
public List<string> Processes
{
get => _Processes;
set
{
_Processes = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Processes)));
}
}
private void RunTimer()
{
_timer = new Timer();
_timer.Interval = 2000;
_timer.Elapsed += _timer_Elapsed;
_timer.Start();
}
private void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
LoadProcesses();
}
private void LoadProcesses()
{
var ps = Process.GetProcesses()
.Select(p => p.ProcessName)
.OrderBy(n => n)
.Distinct()
.ToList();
Processes = ps;
}
public void Dispose()
{
_timer.Stop();
_timer.Dispose();
}
}
Рабочим решением будет использовать Dispatcher Timer
Пример:
public class ViewModel : INotifyPropertyChanged
{
private DispatcherTimer changeTimer;
ViewModel ()
{
changeTimer = new DispatcherTimer...
changeTimer.Tick += Tick;
changeTimer.Interval = TimeSpan.FromSeconds(1);
}
private ObservableCollection<Model> items;
public ObservableCollection<Model> Items
{
get
{
return items;
}
set
{
if(value != items)
{
items = value;
NotifyPropertyChanged("Items");
changeTimer.Start();
}
}
}
private void LoadData()
{
Items = // здесь загружаем данные
}
private Tick(...)
{
LoadData();
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть 2 разных dataGridView, можно ли что бы они содержали одинаковые имена колонок?
Описание проблемы: подключаюсь через RDP к удаленному серверу, на этом сервере запускаю студию Visula Studio 2015, запускаю отладчик и при каждой остановки...
Нужен генератор документации в проекте AspNet