(十七)备忘录完善

1. model层

直接复制todo的修改一下,因为没有筛选功能,备忘录也没有状态码,要删除一些索引和状态
修改后代码

public class MemoViewModel : NavigationViewModel
{
    public MemoViewModel(IMemoService service, IContainerProvider provider) : base(provider)
    {
        MemoDtos = new ObservableCollection<MemoDto>();
        ExecuteCommand = new DelegateCommand<string>(Execute);
        SelectedCommand = new DelegateCommand<MemoDto>(Selected);
        DeleteCommand = new DelegateCommand<MemoDto>(Delete);
        this.service = service;
    }

    private async void Delete(MemoDto obj)
    {
        try
        {
            UpdateLoading(true);
            var deleteResult = await service.DeleteAsync(obj.Id);
            if (deleteResult.Status)
            {
                var model = MemoDtos.FirstOrDefault(t => t.Id.Equals(obj.Id));
                if (model != null)
                {
                    MemoDtos.Remove(model);
                }
            }
        }
        finally 
        {
            UpdateLoading(false);
        }
       
    }

    private void Execute(string obj)
    {
        switch (obj)
        {
            case "新增": Add(); break;
            case "查询": GetDataAsync(); break;
            case "保存": Save(); break;
        }
    }

    private async void Save()//执行保存数据的逻辑
    {
        //首先判断是否符合条件
        if (string.IsNullOrWhiteSpace(CurrentDto.Title) || string.IsNullOrWhiteSpace(CurrentDto.Content)) return;
        UpdateLoading(true);

        try
        {
            if (CurrentDto.Id > 0)
            {//更新
                var updateResult = await service.UpdateAsync(CurrentDto);
                if (updateResult.Status)
                {
                    var todo = MemoDtos.FirstOrDefault(t => t.Id == CurrentDto.Id);
                    if (todo != null)
                    {
                        todo.Title = CurrentDto.Title;
                        todo.Content = CurrentDto.Content;
                    }
                }
                IsRightDrawerOpen = false;
            }
            else
            {//新增
                var addResult = await service.AddAsync(CurrentDto);
                if (addResult.Status)
                {
                    MemoDtos.Add(addResult.Result);
                    IsRightDrawerOpen = false;
                }
            }
        }
        catch (Exception ex)
        {

        }
        finally
        {
            UpdateLoading(false);
        }
    }

    private string search;

    public string Search//搜索条件
    {
        get { return search; }
        set { search = value; RaisePropertyChanged(); }
    }

    private bool isRightDrawerOpen;
    //右侧编辑窗口是否展开
    public bool IsRightDrawerOpen
    {
        get { return isRightDrawerOpen; }
        set { isRightDrawerOpen = value; RaisePropertyChanged(); }
    }
    //添加待办
    private void Add()
    {
        CurrentDto = new MemoDto();
        IsRightDrawerOpen = true;
    }

    private MemoDto currentDto;
    //编辑选中对象/新增对象
    public MemoDto CurrentDto
    {
        get { return currentDto; }
        set { currentDto = value; RaisePropertyChanged(); }
    }

    private async void Selected(MemoDto obj)
    {
        try
        {
            UpdateLoading(true);
            //为了选中数据库中的真实数据,需要通过服务查到数据库的真实数据
            var memoResult = await service.GetFirstOfDefaultAsync(obj.Id);
            if (memoResult.Status)
            {
                CurrentDto = memoResult.Result;
                IsRightDrawerOpen = true;//右侧添加待办打开
            }
        }
        catch (Exception ex)
        {
        }
        finally
        {
            UpdateLoading(false);
        }
    }

    public DelegateCommand<string> ExecuteCommand { get; private set; }
    public DelegateCommand<MemoDto> SelectedCommand { get; private set; }

    public DelegateCommand<MemoDto> DeleteCommand { get; private set; }

    private ObservableCollection<MemoDto> memoDtos;
    private readonly IMemoService service;

    public ObservableCollection<MemoDto> MemoDtos
    {
        get { return memoDtos; }
        set { memoDtos = value; RaisePropertyChanged(); }
    }

    //获取数据
    async void GetDataAsync()
    {
        //打开加载数据页面
        UpdateLoading(true);

        var memoResult = await service.GetAllAsync(new QueryParameter()
        {
            PageIndex = 0,
            PageSize = 100,
            Search = Search,
        });
        if (memoResult.Status)
        {
            MemoDtos.Clear();
            foreach (var item in memoResult.Result.Items)
            {
                MemoDtos.Add(item);
            }
        }

        UpdateLoading(false);
    }
    //重写导航加载数据的方法
    public override void OnNavigatedTo(NavigationContext navigationContext)
    {
        base.OnNavigatedTo(navigationContext);

        GetDataAsync();
    }

2. 页面

  • 侧边栏绑定
    image
  • 查询绑定
    搜索一定是双向绑定不然没有通知更新,会搜索多次才有结果
    image
  • 忙碌界面
    image
  • 单个项备忘录DataTemplate可以复制,但是其中border没有了状态转换,背景设置好不用改变
  • 优化
    把model里面删除方法添加一个try,finally,把加载动画放到开头
posted @ 2023-10-11 16:26  huihui不会写代码  阅读(39)  评论(0)    收藏  举报