相对较新的MVVM - 我意识到这是一个简单的问题,但似乎无法找到答案。
我有4个分组的单选按钮,当选择一个按钮时,将显示其相关选项。我假设这4个单选按钮应该链接到相同的viewmodel命令,在这种情况下,该命令称为UpdateIndex
。
如何确定 哪个 单选按钮正在调用UpdateIndex
,以便我可以采取适当的操作并显示相应的选项?
请注意,我的单选按钮命令绑定会正确调用UpdateIndex
和UpdateIndexExecute
,我只是不知道如何确定调用它的单选按钮。我假设它与CommandParameter
有关 - 但不确定如何从viewmodel访问它。
我的单选按钮示例:
<RadioButton
Content="Option 1"
GroupName="GroupHeader"
Command="{Binding UpdateIndex}" />
单击时从单选按钮调用我的命令的代码片段...
void UpdateIndexExecute()
{
}
bool CanUpdateIndex()
{
return true;
}
public ICommand UpdateIndex
{
get
{
return new RelayCommand(UpdateTabIndexExecute, CanUpdateTabIndex);
}
}
答案 0 :(得分:1)
在真正的MVVM实现中,您将不知道哪个RadioButton执行了该命令,因为ViewModel不应该有关于View的任何信息。用户控件完全属于“仅存在于View中的东西,而不是ViewModel”的类别。您应该将一些有意义的内容传递给ViewModel。
您是正确的,有方法可以使用命令绑定的“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); } }
答案 1 :(得分:0)
您可以绑定内容,使用INotifyPropertyChanged接口处理控件所做的更改,而不是绑定命令。