gpt4 book ai didi

.net - 使用 ViewModel 中定义的 RelayCommand 传递参数(来自 Josh Smith 示例)

转载 作者:行者123 更新时间:2023-12-03 10:49:25 25 4
gpt4 key购买 nike

我想通过使用 RelayCommand 将我的应用程序的 XAML( View )中定义的参数传递给 ViewModel 类。我关注了Josh Smith's excellent article on MVVM并实现了以下。

XAML 代码

        <Button 
Command="{Binding Path=ACommandWithAParameter}"
CommandParameter="Orange"
HorizontalAlignment="Left"
Style="{DynamicResource SimpleButton}"
VerticalAlignment="Top"
Content="Button"/>

View 模型代码
  public RelayCommand _aCommandWithAParameter;
/// <summary>
/// Returns a command with a parameter
/// </summary>
public RelayCommand ACommandWithAParameter
{
get
{
if (_aCommandWithAParameter == null)
{
_aCommandWithAParameter = new RelayCommand(
param => this.CommandWithAParameter("Apple")
);
}

return _aCommandWithAParameter;
}
}

public void CommandWithAParameter(String aParameter)
{
String theParameter = aParameter;
}
#endregion

我在 CommandWithAParameter 方法中设置了一个断点,并观察到 ​​aParameter 设置为“Apple”,而不是“Orange”。这似乎很明显,因为使用文字字符串“Apple”调用了 CommandWithAParameter 方法。

但是,查看执行堆栈,我可以看到“橙色”,我在 XAML 中设置的 CommandParameter 是 ICommand Execute 接口(interface)方法的 RelayCommand 实现的参数值。

也就是执行栈下面方法中的参数值是“橙色”,
  public void Execute(object parameter)
{
_execute(parameter);
}

我想弄清楚的是如何创建 RelayCommand ACommandWithAParameter 属性,以便它可以使用 XAML 中定义的 CommandParameter "Orange"调用 CommandWithAParameter 方法。

有没有办法做到这一点?

我为什么要这样做? “即时本地化”的一部分
在我的特定实现中,我想创建一个可以绑定(bind)到多个按钮的 SetLanguage RelayCommand。我想将两个字符语言标识符(“en”、“es”、“ja”等)作为 CommandParameter 传递,并为 XAML 中定义的每个“设置语言”按钮进行定义。我想避免必须为每种支持的语言创建一个 SetLanguageToXXX 命令,并将两个字符语言标识符硬编码到 ViewModel 中的每个 RelayCommand 中。

最佳答案

我不明白为什么你首先要指定 lambda 的额外复杂性。为什么不这样做:

if (_aCommandWithAParameter == null)
{
_aCommandWithAParameter = new RelayCommand<object>(CommandWithAParameter);
}

private void CommandWithAParameter(object state)
{
var str = state as string;
}

关于.net - 使用 ViewModel 中定义的 RelayCommand 传递参数(来自 Josh Smith 示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/810208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com