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