关于MVVM的事件绑定

本文详细介绍了如何在MVVM框架中将页面控件事件绑定到ViewModel进行处理,通过具体示例展示了如何使用XAML触发器和命令绑定实现数据加载和焦点获取事件的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了符合MVVM框架设计,所以需要将页面控件的事件绑定到VM中进行处理.

同时,绑定的事件传值可以不再受限于原来的后端页面逻辑,可以传任何你需要处理的页面参数、控件参数和VM等

举例说明:

<RichTextBox x:Name="rtBox">
	<i:Interaction.Triggers>
		<i:EventTrigger EventName="DataLoaded">
			<i:InvokeCommandAction Command="{Binding DataLoadedCommand}" CommandParameter="{Binding}"/>
		</i:EventTrigger>
		<i:EventTrigger EventName="GotFocus">
			<i:InvokeCommandAction Command="{Binding GotFocusCommand}" CommandParameter="{Binding ElementName=rtBox}"/>
		</i:EventTrigger>
	</i:Interaction.Triggers>
</RichTextBox>

上面分别绑定了两个事件, CommandParameter中"{Binding}"意为绑定了当前的VM,即"MyVM".

第二个命令"{Binding ElementName=textBox}"指定了一个元素textBox,因此在VM中要用泛型参数传值,VM中命令如下:

public class MyVM : ShapeBaseVM
    {
        public static MyVM Instance;

        public MyVM()
        {
            Instance = this;
        }

        private RelayCommand dataLoaded;
        public RelayCommand DataLoadedCommand
        {
            get
            {
                return dataLoaded ?? (dataLoaded = new RelayCommand(() =>
                {
                    var vm = Shape.TextRange;
                    if (vm.IsDispose)
                    {
                        throw new Exception("当前资源已释放且没有赋值新资源");
                    }
                    if (!vm.IsConvertDone)
                    {
                        vm.ConvertRtf();
                    }
                    RaisePropertyChanged("Rtf");
                }));
            }
        }

        private RelayCommand<RichTextBox> gotFocus;
        public RelayCommand<RichTextBox> GotFocusCommand
        {
            get
            {
                return gotFocus ?? (gotFocus = new RelayCommand<RichTextBox>(sender =>
                {
                    Console.WriteLine("gotFocus:" + sender.Id);
                }));
            }
        }

    }

 

这样就可以把后台逻辑转移到VM中处理了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值