WPF ViewModel

    public class AViewModel : ViewModelBase
    {
        #region 构造函数
        public AViewModel(object window)
        {
            this.CurrentView = (A)window;
            this.DC_Async = new DelegateCommand(new Action<object>(this.F_Async));
            this.DC_Sync = new DelegateCommand(new Action<object>(this.F_Sync));
        }
        #endregion

        #region 属性
        private A CurrentView { get; set; }
        #endregion

        #region 属性-绑定非元素对象
        private string p_Param1;
        public string P_Param1
        {
            get { return p_Param1; }
            set { p_Param1 = value; this.OnPropertyChanged("P_Param1"); }
        }
        #endregion

        #region 委托命令
        public DelegateCommand DC_Async { get; set; }
        public DelegateCommand DC_Sync { get; set; }
        #endregion

        #region 委托方法
        /// <summary>
        /// 异步
        /// </summary>
        /// <param name="sender"></param>
        private void F_Async(object sender)
        {
            this.LoadingShow();
            DoAsync(() =>
            {
                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                {
                    this.CurrentView.btnLoadAsync.Content = "异步加载";
                }));
                this.LoadingHide();
            });
        }
        /// <summary>
        /// 同步
        /// </summary>
        /// <param name="sender"></param>
        private void F_Sync(object sender)
        {
            Task.Run(() =>
            {
                try
                {
                    this.LoadingShow();
                    //this.ThrowException("测试异常错误");

                    Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        this.CurrentView.btnLoadSync.Content = "同步加载22222";
                    }));
                    Application.Current.Dispatcher.Invoke(new Action(() =>
                    {
                        this.CurrentView.btnLoadSync.Content = "同步加载中";
                    }));
                }
                catch (Exception ex) { this.BoxErrorMsg(ex.Message); }
                finally { this.LoadingHide(); }
            });
        }
        #endregion

        #region 私有方法
        private async void DoAsync(Action actionComplete)
        {
            await Task.Run(() =>
            {
                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                {
                    this.CurrentView.btnLoadAsync.Content = "异步加载中";
                }));
                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));//程序执行
                if (actionComplete != null) { actionComplete.Invoke(); }
            });
        }

        private void F_ffffff(object sender)
        {
            Task.Run(() =>
            {
                try
                {
                    this.LoadingShow();
                    #region 业务
                    #endregion
                }
                catch (Exception ex) { this.BoxErrorMsg(ex); }
                finally { this.LoadingHide(); }
            });
        }
        #endregion
    }
 public class ViewModelBase : DependencyObject, INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName = null)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public int PageIndex = 1;
        public int PageSize = 20;
        public ViewModelBase()
        {
            IsLoading = Visibility.Collapsed;
        }

        #region 加载
        private Visibility isLoading;
        public Visibility IsLoading
        {
            get { return isLoading; }
            set { isLoading = value; this.OnPropertyChanged("IsLoading"); }
        }
        public void LoadingShow()
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                IsLoading = Visibility.Visible;
            }));
        }
        public void LoadingHide()
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                IsLoading = Visibility.Collapsed;
            }));
        }
        #endregion

        #region 抛出异常,提示
        public void ThrowException(string msg)
        {
            throw new Exception(msg);
        }
        public void BoxSuccessMsg(string msg)
        {
            MessageBox.Show(msg, "提示", MessageBoxButton.OK, MessageBoxImage.Information);
        }
        public void BoxErrorMsg(string msg)
        {
            MessageBox.Show(msg, "提示", MessageBoxButton.OK, MessageBoxImage.Error);
        }
        #endregion
    }

 

posted @ 2020-09-11 09:18  jasonlai2016  阅读(322)  评论(0编辑  收藏  举报