【发布时间】:2017-07-20 15:39:18
【问题描述】:
我正在尝试将按钮单击时的两个 ICommand 参数传递给视图模型中的方法。
现在我只能传递一个参数。
代码在这里。
XAML(视图):
<Button x:Name="btnAdd" Command="{Binding AddUserCommand}"
CommandParameter="{Binding IDUser}"/>
查看模型:
public string IDUser
{
get
{
return this.personalData.UserID;
}
set
{
if (this.personalData.UserID == value)
{
return;
}
this.personalData.UserID = value;
OnPropertyChanged("UserID");
}
}
private RelayCommand addUserCommand;
public ICommand AddUserCommand
{
get
{
return addUserCommand ??
(addUserCommand = new RelayCommand(param => this.AddUser(param.ToString())));
}
}
public vol AddUser(string userId)
{
// Do some stuff
}
现在我想在按钮单击时传递另一个 ICommand 参数。 我要传递的参数是复选框中的值(选中与否)。
<CheckBox x:Name="Status" Content="Married"/>
因此视图模型中的方法 AddUser 将具有以下签名:
public vol AddUser(string userId, bool status)
{
// Do some stuff
}
我知道可以将 MultiBinding 与转换器结合使用来完成,但我不知道具体该怎么做。我也不明白为什么在使用多重绑定时需要转换器。
【问题讨论】:
-
虽然绑定可能比您想要的更冗长,但它也可能是正确的方法。如果您确实需要转换器,您需要它的原因与从方法返回 (DTO) 对象的原因相同:因为该方法只能返回一件事。
-
也许是一个很好的post 来回答为什么在使用多重绑定时需要转换器。
-
为什么复选框没有绑定到您的视图模型?如果是,您可以简单地查看值。
-
@user1624552 绑定您希望在 WPF 中持久保存的任何值是一个好主意。 WPF 通常会卸载不可见的控件,因此有时您会因未绑定的值而出现奇怪的行为。例如,如果在 TabControl 上您可以更改选项卡并返回,并且所有未绑定的数据都将重置,因为该控件已卸载或重新加载。或者有时在最小化应用程序并恢复它时,它会重置所有内容,因为它卸载并重新加载了控件。
-
我理解这种感觉。你所要求的是可能的,有点,但并非没有很多繁重的工作,这真的不会让你买太多。
标签: c# wpf mvvm icommand multibinding