gpt4 book ai didi

c# - 如何确定哪个用户控件正在调用命令

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:15 26 4
gpt4 key购买 nike

MVVM 的新手 - 我意识到这是一个简单的问题,但似乎找不到答案。

I have 4 grouped radio buttons that when one is selected will show its associated options.我假设这 4 个单选按钮应该链接到同一 viewmodel 命令,在本例中该命令称为 UpdateIndex

如何确定哪个 单选按钮正在调用 UpdateIndex,以便我可以采取适当的操作并显示适当的选项?

请注意,我的 UpdateIndexUpdateIndexExecute 确实从我的单选按钮命令绑定(bind)中被正确调用,我只是不知道如何确定哪个单选按钮正在调用它。我认为它与 CommandParameter 有关 - 但不确定如何从 View 模型访问它。

我的单选按钮示例:

<RadioButton
Content="Option 1"
GroupName="GroupHeader"
Command="{Binding UpdateIndex}" />

单击时从单选按钮调用我的命令的代码片段...

void UpdateIndexExecute()
{

}

bool CanUpdateIndex()
{
return true;
}

public ICommand UpdateIndex
{
get
{
return new RelayCommand(UpdateTabIndexExecute, CanUpdateTabIndex);
}
}

最佳答案

在真正的 MVVM 实现中,您不会知道哪个 RadioButton 执行了命令,因为 ViewModel 不应该有任何关于 View 的信息。用户控件完全属于“仅存在于 View 中,而不存在于 ViewModel 中的东西”的类别。您应该将一些有意义的东西传递给 ViewModel。

你是对的,有一些方法可以使用命令绑定(bind)的“CommandParameter”将信息传递到 ICommand。为此,您将使用 RelayCommand ( RelayCommand) 类的“通用”形式,其中“T”表示您作为参数传递的对象类型。

如果您只是想将索引作为参数传递,我想它看起来应该是这样的:

<!-- We are passing index "1" as a parameter -->
<RadioButton Content="Option 1" GroupName="GroupHeader"
Command="{Binding UpdateIndex, CommandParameter=1}"/>

然后在您的 ViewModel 中:

void UpdateIndexExecute(int index)
{

}

bool CanUpdateIndex(int index)
{
return true;
}

public ICommand UpdateIndex
{
get
{
return new RelayCommand<int>(UpdateTabIndexExecute, CanUpdateTabIndex);
}
}

关于c# - 如何确定哪个用户控件正在调用命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16567683/

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