1

我对如何在 XAML 中使用 CommandParameter 有点迷茫。我正在尝试绑定一个文本框和一个按钮。

这是我的 XAML 代码:

<TextBox x:Name="txtCity" Height="70"
         VerticalAlignment="Top"/>
<Button x:Name="btnCity"
        Content="Get"
        Background="CornflowerBlue"
        Height="70"
        Command="{Binding GetweatherCommand}"
        CommandParameter="{Binding ElementName=txtCity, Path=Text}"/>

在我的 ViewModel 类中,我有以下内容来处理 clic 操作:

ActionCommand getWeatherCommand;          //ActionCommand derivides from ICommand
public ActionCommand GetWeatherCommand
{
        get
        {
            if (getClimaCommand != null)
            {
                getClimaCommand = new ActionCommand(() =>
                    {
                        serviceModel.getClima("????");
                    });
            }

            return getWeatherCommand;
        }
 }

我的 ActionCommand 类:

public class ActionCommand : ICommand
{
    Action action;
    public ActionCommand(Action action)
    {
        this.action = action;
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

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

当我调试时,ExecuteCanExecute方法中的参数具有正确的值。但是,我想问题出在ViewClass (GetWeatherCommand). 我不知道如何传递参数。

那么,基于以上内容,有谁知道如何将参数传递给将要执行的方法?

4

1 回答 1

2

ActionCommand.Execute忽略命令参数。尝试这个:

public class ActionCommand<TParam> : ICommand
{
    Action<TParam> action;
    public ActionCommand(Action<TParam> action)
    {
        this.action = action;
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        action((TParam)parameter);
    }
}

接着:

getClimaCommand = new ActionCommand<string>(param =>
    {
        serviceModel.getClima(param);
    });
于 2013-06-25T04:05:57.963 回答