• 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
        }
  • 相关阅读:
    Razor 常用又容易忘记语法
    游览器 reflow
    正则表达式
    migration to end point routing
    js 翻译 c# 注意事项
    Angular 学习笔记 work with excel (导出 excel)
    html4,5 basic
    IIS 服务器配置
    meta 的用途
    正则表达 常用
  • 原文地址:https://www.cnblogs.com/jasonlai2016/p/13649791.html
Copyright © 2020-2023  润新知