WPF关于绑定与更新修改

看到一些资料与教程视频,

首先 我们先做好一个公共的INotifyPropertyChanged事件,也就是通知更新,当然 如果你安装了MvvmLight包,可以直接直接不用写

 public class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler? PropertyChanged;
        public void OnPropertyChanged([CallerMemberName]string propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

再创建命令类

复制代码
public class MyCommand : ICommand
    {
 
        Action executeAction;
        public MyCommand(Action action)
        {
            executeAction = action;
        }
        public event EventHandler? CanExecuteChanged;
 
        public bool CanExecute(object? parameter)
        {
            return true;
        }
 
        public void Execute(object? parameter)
        {
            executeAction();
        }
    }
复制代码

然后创建我们要ViewModel类,要引用到前面写好的通知更新类, 把方法放在set中,也就是OnPropertyChanged()方法,MvvmLight包是RaisePropertyChanged()方法

复制代码
public class MainViewMoel:ViewModelBase
    {
        public MainViewMoel()
        {
            Name = "GGG";
            ShowCommand = new MyCommand(Show);
        }
 
        public MyCommand ShowCommand { get; set; }
        private string name ="";
        public string Name { get { return name; } 
            set 
            { 
                name = value;OnPropertyChanged(); 
            } 
        }
        public void Show()
        {
            Name = "1111111111";
            MessageBox.Show("这是个按钮!");
        }
    }
复制代码

最后赋值到我们的对应的页面上

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

xaml 中也要绑定对应的控件中

 <StackPanel >
            <TextBox Height="50" Text="{Binding Name}" x:Name="txtName" Margin="5"/>
            <Button Height="50" Command="{Binding ShowCommand}"  x:Name="Btn" Margin="5"/>
        </StackPanel>

这样就是一个测试的绑定并通知的Demo,用于以后参考

视频讲解来源WPF项目实战合集(2022终结版)_哔哩哔哩_bilibili

主要是OnPropertyChanged()方法 ,能够自定义,很方便的去使用 ,当然 你直接使用MvvmLight包的话,也更省力

posted @   FalyEnd  阅读(251)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示