You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
4.1 KiB

using AddressBook_MVVMSampleV2.Interface;
using AddressBook_MVVMSampleV2.Model;
using ReactiveUI;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Reactive;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace AddressBook_MVVMSampleV2.ViewModel
{
public class MainViewModel : ReactiveObject
{
public ObservableCollection<Person> Persons { get; set; }
public ICommand AddCommand { get; set; }
public ICommand DeleteCommand { get; set; }
public ICommand ModifyCommand { get; set; }
public ICommand ExitCommand { get; set; }
private readonly IMessageBoxService MessageBoxService;
private readonly Func<Person, AddViewModel.ViewType, IDialogView> CreateAddView;
public MainViewModel() : this(null, null)
{
}
public MainViewModel(IMessageBoxService messageBoxService, Func<Person, AddViewModel.ViewType, IDialogView> createAddView)
{
this.MessageBoxService = messageBoxService;
this.CreateAddView = createAddView;
this.Persons = new ObservableCollection<Person>();
InitInstance();
}
private void InitInstance()
{
// Init Commands
this.AddCommand = ReactiveCommand.Create<Unit>(CommandAdd);
this.ModifyCommand = ReactiveCommand.Create<int, Unit>(index => CommandModify(index));
this.DeleteCommand = ReactiveCommand.Create<int, Unit>(index => CommandDelete(index));
this.ExitCommand = ReactiveCommand.Create<IWindowView, Unit>(view => CommandExit(view));
// Init Default Data
this.Persons.Add(new Person() { Name = "Kim", Gender = true, PhoneNumber = "123-4567", Address = "KOR" });
this.Persons.Add(new Person() { Name = "Max", Gender = true, PhoneNumber = "123-4567", Address = "USA" });
this.Persons.Add(new Person() { Name = "John", Gender = true, PhoneNumber = "123-4567", Address = "UK" });
this.Persons.Add(new Person() { Name = "Richard", Gender = true, PhoneNumber = "123-4567", Address = "UK" });
this.Persons.Add(new Person() { Name = "Shinoda", Gender = true, PhoneNumber = "123-4567", Address = "JPN" });
}
private Unit CommandAdd()
{
Person addData = new Person();
IDialogView view = this.CreateAddView(addData, AddViewModel.ViewType.Add);
if (view.ShowDialog() != true)
return Unit.Default;
this.Persons.Add(addData);
return Unit.Default;
}
private Unit CommandDelete(int selectedIndex)
{
if (selectedIndex < 0)
{
this.MessageBoxService.Show("No selected data.", "AddressBook", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return Unit.Default;
}
MessageBoxResult result = this.MessageBoxService.Show("Are you sure to delete?", "AddressBook", MessageBoxButton.OKCancel, MessageBoxImage.Question);
if (result != MessageBoxResult.OK)
return Unit.Default;
this.Persons.RemoveAt(selectedIndex);
return Unit.Default;
}
private Unit CommandModify(int selectedIndex)
{
if (selectedIndex < 0)
{
this.MessageBoxService.Show("No selected data.", "AddressBook", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return Unit.Default;
}
Person modifyData = new Person(this.Persons[selectedIndex]);
IDialogView view = this.CreateAddView(modifyData, AddViewModel.ViewType.Modify);
if (view.ShowDialog() != true)
return Unit.Default;
this.Persons[selectedIndex] = modifyData;
return Unit.Default;
}
private Unit CommandExit(IWindowView view)
{
view.Close();
return Unit.Default;
}
}
}