Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过CommandParameter将字符串传递给方法_C#_Wpf_Xaml_Mvvm Light - Fatal编程技术网

C# 通过CommandParameter将字符串传递给方法

C# 通过CommandParameter将字符串传递给方法,c#,wpf,xaml,mvvm-light,C#,Wpf,Xaml,Mvvm Light,我想问一下,是否可以将字符串值从视图(xaml)传递到ViewModel中的属性 我有两个标签。第一个是“过程”,第二个是“非过程”。取决于RelayCommand将执行的字符串值,并使用Dispatchermer激发方法(如果是进程,则激发Dispatcher1,如果是非进程,则激发Dispatcher2) xaml: 我可以使用CommandParameter和CommandParameterValue将该字符串传递给属性吗 谢谢您的任何建议是的,您可以,如下所示: <i:Inte

我想问一下,是否可以将字符串值从视图(xaml)传递到ViewModel中的属性

我有两个标签。第一个是“过程”,第二个是“非过程”。取决于RelayCommand将执行的字符串值,并使用Dispatchermer激发方法(如果是进程,则激发Dispatcher1,如果是非进程,则激发Dispatcher2)

xaml:


我可以使用CommandParameterCommandParameterValue将该字符串传递给属性吗


谢谢您的任何建议

是的,您可以,如下所示:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="PreviewMouseDown" >
        <cmd:EventToCommand Command="{Binding EmployeeViewM.MeasurementEndExecution}" CommandParameter="Process"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

在问你是否可以之前,你试过了吗?当然,您可以使用
CommandParameter
,它不必是
字符串
,它可以是您想要的任何内容,也可以绑定到您想要的任何属性。如果有两个窗口,第一个窗口可以传递字符串“process”,第二个窗口可以传递字符串“non-process”。命令引发的方法有一个类型为
object
的参数,它正是窗口传递给VM的参数。您尝试了什么?怎么搞的?这和你想要的有什么不同?请提供一个很好的例子,清楚地说明你正在尝试做什么,以及你在让代码工作时遇到的具体问题的精确描述。1.如果(如果我理解正确)我们从另一个默认为null的构造函数调用此构造函数,为什么要抛出
ArgumentNullException
?2.
CommandManager
的作用是什么?3.如果我们挑剔的话,最好为带谓词和不带谓词创建两个单独的类,对吗?@Whazz您的顾虑很周到,但我只是从MSDN中选择了RelayCommand的基本定义,因为重点是在ViewModel中将值传递给命令的能力。而不是命令设计的有用性。
<i:Interaction.Triggers>
    <i:EventTrigger EventName="PreviewMouseDown" >
        <cmd:EventToCommand Command="{Binding EmployeeViewM.MeasurementEndExecution}" CommandParameter="Process"/>
    </i:EventTrigger>
</i:Interaction.Triggers>
<i:Interaction.Triggers>
    <i:EventTrigger EventName="PreviewMouseDown" >
        <cmd:EventToCommand Command="{Binding EmployeeViewM.MeasurementEndExecution}" CommandParameter="Non-Process"/>
    </i:EventTrigger>
</i:Interaction.Triggers>
 public class RelayCommand : ICommand
{
    #region Fields

    readonly Action<object> _execute;
    readonly Predicate<object> _canExecute;

    #endregion // Fields

    #region Constructors

    /// <summary>
    /// Creates a new command that can always execute.
    /// </summary>
    /// <param name="execute">The execution logic.</param>
    public RelayCommand(Action<object> execute)
        : this(execute, null)
    {
    }

    /// <summary>
    /// Creates a new command.
    /// </summary>
    /// <param name="execute">The execution logic.</param>
    /// <param name="canExecute">The execution status logic.</param>
    public RelayCommand(Action<object> execute, Predicate<object> canExecute)
    {
        if (execute == null)
            throw new ArgumentNullException("execute");

        _execute = execute;
        _canExecute = canExecute;
    }

    #endregion // Constructors

    #region ICommand Members


    public bool CanExecute(object parameter)
    {
        return _canExecute == null ? true : _canExecute(parameter);
    }

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

    public void Execute(object parameter)
    {
        _execute(parameter);
    }

    #endregion // ICommand Members
}