2016-05-31 121 views
0

我想問,是否可以通過傳遞字符串從view(xaml)到ViewModel中的屬性的值?通過CommandParameter將字符串傳遞給方法

我有兩個選項卡。首先是「過程」,第二個是「非過程」。取決於該字符串值RelayCommand將使用DispatcherTimer執行並激活方法(如果Process然後是Dispatcher1,如果Non-Process不是Dispatcher2)。

XAML:

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

我可以使用CommandParameterCommandParameterValue來傳遞的財產?

謝謝你的任何建議

+1

在問你是否可以,你試過嗎? *當然*你可以使用'CommandParameter',它不能是'string',它可以是任何你想要的,並且可以綁定到你想要的任何屬性。如果您有兩個窗口,則首先可以傳遞字符串「process」,並在第二個「non-process」中傳遞。命令引發的方法有一個'object'類型的參數,它恰好是窗口傳遞給VM的參數。 –

+0

你試過什麼_did?發生了什麼?這與你想要的有什麼不同?請提供一個很好的[mcve],清楚地表明你正在嘗試做什麼,以及準確描述你正在使代碼工作的具體問題。 –

回答

0

當然可以,象下面這樣:

<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> 

希望您的RelayCommand(或ICommand實現)已經接受CommandParameter。如下所示。

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 
} 
相關問題