C#-WPF MVVM框架 图片或Button传递的命令参数为本身的内容Content或名字Name,并转换为枚举类型

逻辑为:View中的控件所含的字段或名字---> ViewModel中作为参数--->转换为枚举类型Enum

1、传递button的Content

View中代码:

<Button x:Name="壁装" Content="壁装" 
Command="{Binding QueryLampInstallingTypeCommand}" 
CommandParameter="{Binding Content,ElementName=壁装}">
</Button>

ViewModel中代码

 //构造函数
public RectangularLayoutViewModel()
        {
            QueryLampInstallingTypeCommand = new RelayCommand<object>(t => QueryLampInstallingType(t));
            
        }

//命令---通过单击事件获取枚举类型
public RelayCommand<object> QueryLampInstallingTypeCommand { get; set; }
//业务逻辑
private void QueryLampInstallingType(object t)
        {
            //将button或者触发事件中的CommandParameter绑定为Content或Name,传入字符串,进行字符串和枚举间的转型
            this._lampInstallingType = (LampInstallingType)Enum.Parse(typeof(LampInstallingType), t.ToString());
        }

2、传递Image的Name

        后台代码与1中一样

        View中代码:采用单击事件

<Image x:Name="壁装" Grid.Row="0" Grid.Column="1" Source="F:/EasyBIM/EleDesign/Ele_WXF/Images/WallMountedLamp.jpg" Margin="5">
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="MouseDown">
                                        <i:InvokeCommandAction  Command="{Binding QueryLampInstallingTypeCommand}"
                                                  CommandParameter="{Binding Name,ElementName=壁装}"              
                                        />
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </Image>

MVVM模式中,命令响应通常是通过ViewModel层实现的,而实现命令接口`ICommand`的`RelayCommand`类是实现命令响应的一种常见方式。以下是一个详细的步骤和代码示例来展示如何在C# WPF中使用MVVM模式实现用户界面的命令响应: 参考资源链接:[C# WPF MVVM模式实战教程:完整示例解析](https://wenku.csdn.net/doc/7gejsrqtmy?spm=1055.2569.3001.10343) 首先,确保你有一个ViewModel类,且这个类实现了`ICommand`接口。通常,`RelayCommand`会在这个ViewModel中被创建,用于封装具体的命令逻辑。`RelayCommand`的实现允许你执行和更新命令状态,这样就可以在命令逻辑中包含条件检查,命令执行后更新命令的可执行状态。 ```csharp public class RelayCommand : ICommand { private readonly Action<object> _execute; private readonly Predicate<object> _canExecute; public RelayCommand(Action<object> execute, Predicate<object> canExecute = null) { _execute = execute ?? throw new ArgumentNullException(nameof(execute)); _canExecute = canExecute; } public bool CanExecute(object parameter) { return _canExecute == null || _canExecute(parameter); } public void Execute(object parameter) { _execute(parameter); } public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } } ``` 接下来,在你的ViewModel中定义一个`RelayCommand`实例,且提供执行命令时所需的方法: ```csharp public class MyViewModel { public RelayCommand MyCommand { get; private set; } public MyViewModel() { MyCommand = new RelayCommand(MyExecuteMethod, MyCanExecuteMethod); } private void MyExecuteMethod(object parameter) { // 这里编写命令执行时的逻辑代码 } private bool MyCanExecuteMethod(object parameter) { // 根据当前状态返回命令是否可以执行 return true; // 者基于某些条件返回 false } } ``` 在你的WPF的XAML文件中,可以这样绑定按钮的命令: ```xml <Button Content= 参考资源链接:[C# WPF MVVM模式实战教程:完整示例解析](https://wenku.csdn.net/doc/7gejsrqtmy?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值