首页 > 其他分享 >WPF笔记8——与MVVM有关的文件夹

WPF笔记8——与MVVM有关的文件夹

时间:2024-12-03 17:33:27浏览次数:3  
标签:set MVVM get ViewModel entity 文件夹 new WPF public

WPF项目使用MVVM时,要在项目中创建对应的文件夹:Command、Model、Service、View、ViewModel,
如下图:

(1)View文件夹:用来存放窗口、usercontrol;

(2)ViewModel文件夹:存放ViewModel类(View类需要绑定的属性、命令都定义在对应的ViewModel类中)

//ObjectPropertyNotified是ViewModel类的基类
public class ObjectPropertyNotified : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler? PropertyChanged;


    public void RaisePropertyNotifiedChanged(string propteryname)
    {
        PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propteryname));
    }
}


//定义自己的ViewModel类
//ViewModel类就是与界面绑定(属性绑定、命名绑定)有关类
public class CompulateViewModel : ObjectPropertyNotified
{
    #region 字段及属性

    private CompulateEntity entity;

    public double Input1
    {
        get
        {
            return entity.Input1;
        }
        set
        {
            entity.Input1 = value;
            this.RaisePropertyNotifiedChanged(nameof(Input1));
        }
    }

    public double Input2
    {
        get
        {
            return entity.Input2;
        }
        set
        {
            entity.Input2 = value;
            this.RaisePropertyNotifiedChanged(nameof(Input2));
        }
    }
    public double Input3
    {
        get
        {
            return entity.Input3;
        }
        set
        {
            entity.Input3 = value;
            this.RaisePropertyNotifiedChanged(nameof(Input3));
        }
    } 

    #endregion

    #region 命令方法

    public DeletegateCommand AddCommand { get; set; }
	public DeletegateCommand SaveCommand { get; set; }

	public void AddAction(Object? parameter)
	{
		Input3 = Input2 + Input1;
	}


	public void SaveAction(Object? parameter)
	{
		SaveFileDialog sfd = new SaveFileDialog();
		sfd.ShowDialog();
	}


	#endregion


	/// <summary>
	/// ViewModel的构造
	/// </summary>
	public CompulateViewModel()
	{
        entity= new CompulateEntity();
        AddCommand = new DeletegateCommand(AddAction, new Func<object?, bool>(x => { return true; }));
		SaveCommand = new DeletegateCommand(SaveAction, new Func<object?, bool>(x => { return true; }));
	}

}

(3)Command文件夹:用来存放各种命令列或命令接口;

    public class DeletegateCommand : ICommand
    {

        Action<object?> ExecuteAction { get; set; }
        Func<object?, bool> CanExecuteFunc { get; set; }


        public event EventHandler? CanExecuteChanged
        {
            add
            {
                CommandManager.RequerySuggested += value;
            }
            remove
            {
                CommandManager.RequerySuggested -= value;
            }
        }

        public DeletegateCommand(Action<object?> executeAction, Func<object?, bool> canExecuteFunc)
        {
            ExecuteAction = executeAction;
            CanExecuteFunc = canExecuteFunc;
        }

        public bool CanExecute(object? parameter)
        {
            if (CanExecuteFunc == null)
            {
                return true;
            }
            return CanExecuteFunc(parameter);

        }

        public void Execute(object? parameter)
        {
            ExecuteAction?.Invoke(parameter);
        }
    }


(4)Model文件夹:主要用于处理数据结构和业务逻辑相关的数据对象;
public class CompulateEntity
{ 
    public double Input1 { get; set; }
    public double Input2 { get; set; }
    public double Input3 { get; set; }

}

(5)Service文件夹:用来存放各类服务类,这些服务类通常用于处理一些与外部资源交互,或业务逻辑中相对独立的功能。
通常是与数据库、文件系统、网络或其他外部资源进行交互或则是业务逻辑等,提供数据给ViewModel使用。

例如:一个简单的数据访问服务ProductDataService可以用于从数据库或者其他数据源获取Product列表。
它可能有一个方法GetProducts(),在这个方法内部可能使用数据库连接库(如 Entity Framework 等)来查询数据库并返回产品列表

public class ProductDataService
{
    public List<Product> GetProducts()
    {
        // 这里可以是从数据库获取产品列表的实际代码,例如使用Entity Framework
        using (var context = new MyDbContext())
        {
            return context.Products.ToList();
        }
    }
}

标签:set,MVVM,get,ViewModel,entity,文件夹,new,WPF,public
From: https://www.cnblogs.com/zeoHere/p/18584596

相关文章

  • WPF中嵌入第三方窗体-WindowsFormsHost使用
    嵌入第三方窗体到Windows窗体或控件中,通过调用API方法很容易实现,但是在WPF存在一些问题,这里对解决这些问题的方法做一点笔记:首先说一下要做嵌入第三方窗体要用到的API方法[DllImport("user32.dll",SetlastError=true)]privatestaticexternIntPtrSetParent(IntPtrhWndC......
  • 秒开超大文件夹:如何禁止 Windows 自动识别文件夹类型
    Windows的「自动文件类型发现」功能会分析文件夹内容,以便应用最合适的视图模板。但对于包含大量文件和文件类型复杂的超大文件夹,则会导致「文件资源管理器」的打开速度变慢。本文将教你如何关闭这一功能,以加快文件夹的加载速度。什么是文件夹类型在Windows系统中,有「常规项......
  • linux/ubuntu下一个文件夹里面文件太多打不开,用脚本分成一个个小文件夹
    python"""功能:把大文件目录分成几个小文件"""importosimportshutilimportrandompath_dir="/media/0001_data/"T_nums=2000files=os.listdir(path_dir)#random.shuffle(files)forcnt,fileinenumerate(files):print......
  • 【Azure ADLS】为Azure Data Lake Storage的Container赋予了操作权限后创建子文件夹遇
    问题描述在ADF操作StorageAccount(AzureDataLakeStorage),在已经为根Container赋予了权限后,创建子文件夹的时候还是报错403"Thisrequestisnotauthorizedtoperformthisoperationusingthispermission"403  问题解答这是因为ADLSContainer的ACL权限有两......
  • WPF+MVVM案例实战与特效(三十一)- 封装一个加载动画的自定义控件
    文章目录1、案例效果2、案例实现1、资源与文件创建2、自定义控件封装3、自定义控件使用4、总结1、案例效果2、案例实现在开发WPF应用程序时,我们常常需要一个灵活的加载动画控件,该控件可以根据窗口的大小自动调整其内部元素(如图片、边框和文本)的尺寸,并......
  • wpf 标尺 刻度尺 适用于图像缩放
    xaml部分主要代码:<Canvasx:Name="cvRuler"Margin="0"Background="WhiteSmoke"TextBlock.Foreground="Black"/>后台主要代码1//画标尺2privatevoidDrawRule()3{45if(cvRuler.......
  • WPF中的TypeConverter类型
    自定义对象如下:点击查看代码publicclassHuman{publicstringName{get;set;}publicHumanChild{get;set;}}需求1:点击界面上Button时弹出Human对象的Name信息代码实现:点击查看代码<Windowx:Class="HappyWPF.MainWindow"......
  • 界面控件DevExpress WPF v24.2新功能预览 - 人工智能(AI)集成
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • vue基础之4:el与data的两种写法、理解MVVM、Object.defineProperty方法、数据代理
    欢迎来到“雪碧聊技术”CSDN博客!在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目......
  • 使用XWPFTemplate进行java后端word模版导出
    1.pom引入poi-tl<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.7.3</version></dependency> 2.word模版 3.业务代码......