首页 > 其他分享 >WPF知识点备忘录——MVVM原理

WPF知识点备忘录——MVVM原理

时间:2023-02-28 23:23:08浏览次数:46  
标签:知识点 MVVM people ID new WPF parameter public mod

通知类

namespace WPFMVVM.ViewModels
{
    class NotificationObject : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void RasePropertyChanged(string propertyName)
        {
            this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
View Code

命令类

namespace WPFMVVM.Commands
{
    class DelegateCommand : ICommand
    {
        public event EventHandler CanExecuteChanged;

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

        public void Execute(object parameter)
        {
            if (ExecuteAction == null) return;
            this.ExecuteAction(parameter);
        }

        public Action<object> ExecuteAction { get; set; }
        public Func<object,bool> CanExecuteFunc { get; set; }
    }
}
View Code

View

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Button Grid.Column="1" Grid.Row="1" HorizontalAlignment="Right" Content="Add" Command="{Binding AddCommand}"/>
        <Button Grid.Column="2" Grid.Row="1" HorizontalAlignment="Right" Content="Edit" 
                Command="{Binding EditCommand}" CommandParameter="{Binding ElementName=dataGrid,Path=SelectedItem}"/>

        <DataGrid Grid.ColumnSpan="3" Name="dataGrid" Margin="3" Grid.Row="2"
                  Padding="3" ItemsSource="{Binding People}" Grid.RowSpan="3" />
    </Grid>
View Code

CS代码

    public partial class BindingAndValidation : Window
    {
        public BindingAndValidation()
        {
            InitializeComponent();
            this.DataContext = new BindingAndValidationViewModel();
        }
    }

ViewModel

namespace WPFMVVM.ViewModels
{
    class BindingAndValidationViewModel : NotificationObject
    {
        private ObservableCollection<PersonModel> people = new ObservableCollection<PersonModel>();
        public ICollection<PersonModel> People
        {
            get { return people; }
            set
            {
                people = (ObservableCollection<PersonModel>)value;
                this.RasePropertyChanged("People");
            }
        }

        public DelegateCommand AddCommand { get; set; }
        public DelegateCommand DelCommand { get; set; }
        public DelegateCommand EditCommand { get; set; }

        private void Add(object parameter)
        {
            var dlg = new PersonEdit(null);
            if (dlg.ShowDialog() == true)
            {
                var mod = (PersonViewModel)dlg.DataContext;
                people.Add(new PersonModel { ID = mod.ID, Name = mod.Name });
            }
        }

        private void Edit(object parameter)
        {
            var mod = (PersonModel)parameter;
            var dlg = new PersonEdit(mod);
            if (dlg.ShowDialog() == true)
            {
                var person = people.FirstOrDefault(x => x.ID == mod.ID);
                person.Name = mod.Name;
            }
        }

        public BindingAndValidationViewModel()
        {
            people.Add(new PersonModel { ID = 1, Name = "A" });
            people.Add(new PersonModel { ID = 2, Name = "B" });
            people.Add(new PersonModel { ID = 3, Name = "C" });

            AddCommand = new DelegateCommand();
            AddCommand.ExecuteAction = new Action<object>(this.Add);

            EditCommand = new DelegateCommand();
            EditCommand.ExecuteAction = new Action<object>(this.Edit);
        }  
    }
}
View Code

 

标签:知识点,MVVM,people,ID,new,WPF,parameter,public,mod
From: https://www.cnblogs.com/chixiner/p/17166461.html

相关文章

  • WPF知识点备忘录——数据绑定
     DataContext绑定this.DataContext=newBindingAndValidationViewModel();绑定到集合ObservableCollection<ViewModel.Product>vProducts=new......
  • css易掉坑知识点整理之系列(二)
    之前也整理过系列(一),有兴趣的请点击:​​系列一​​。这是我在学习的过程中遇到的易错的或者易掉坑的css知识点的总结整理,嗯,还是会持续更新的2018/6/19今天遇到了一个base64格......
  • 前端知识点系列一
    什么是同源:源:如果两个页面的协议,端口和域名是相同的,则两个页面具有相同的源。同源策略限制从一个源加载的文档或脚本与另一个不同的源的资源进行交互。即一个页面不能调用另......
  • classList属性的知识点整理
    classLIst属性返回元素的类名,作为DOMTokenList对象该属性用于在元素中添加、移出、切换css类语法:elem.classList方法:add(String[,String]):添加指定的类值。如果这些类已经......
  • WPF中图形表示语法详解(Path之Data属性语法)
    老规矩,看图说话。先看显示效果:(图1)XAML(代码A):<Pagexmlns="​​http://schemas.microsoft.com/winfx/2006/xaml/presentation​​​"xmlns:x="​​http://schemas.microsof......
  • WPF体验系列
    从今天开始,我将陆续分享对WPF的体验系列,敬请垂注。这里将陆续列出所有WPF体验系列的目录(不断更新中),如果你认为有一定参考价值,你可以收藏它。以下是拟建的部分目录(不断增......
  • 给WPF示例图形加上方便查看大小的格子之完善版本
    去年10月份,我曾写过一篇"给WPF示例图形加上方便查看大小的格子"的BLOG,这次由于需要,将它完善一下,可以有效地区别100的整数倍逻辑像素(与设备无关像素)单位的显示。显示效......
  • WPF中任意Object的XAML代码格式化输出
    有时候,我们需要将WPF中的控件自身的XAML代码输出成文本,那么,我们可以使用System.Windows.Markup.XamlWriter.Save()方法来完成此任务。关于XamlWriter.Save()的示例,我曾经......
  • WPF中制作立体效果的文字或LOGO图形
    较久之前,我曾写过一篇:“​​WPF绘制党徽(立体效果,Cool)​​ ”的博文。有感兴趣的朋友来EMAIL问是怎么制作的?本文解决此类问题。有时,为了美观的需要,我们可能需要在应用程......
  • WPF中制作立体效果的文字或LOGO图形(续)
    上篇“WPF中制作立体效果的文字或LOGO图形”中讲述了立体LOGO图形的制作方法。从程序开发人员的角度来讲,这样的做法是不能令人满意的。首先,费时费力效率不高;其次,完全没有通......