<分区>
假设我们有 2 个组合框和一个按钮。单击按钮应该将两个组合框的值传递给 viewmodel 的命令。如何获取两个组合框的值并将这两个值传递给命令?
<分区>
假设我们有 2 个组合框和一个按钮。单击按钮应该将两个组合框的值传递给 viewmodel 的命令。如何获取两个组合框的值并将这两个值传递给命令?
最佳答案
如果两个组合框都放在同一个面板中,您可以发送对它的引用并通过它们的名称检索组合框。这是不可取的,因为您不应该处理 ViewModel 中的 UI 元素。
<StackPanel Name="StackPanel">
<ComboBox Name="FirstComboBox"/>
<ComboBox Name="SecondComboBox"/>
<Button Command="{Binding YourCommand}" CommandParameter="{Binding ElementName=StackPanel}"/>
</StackPanel>
后一种方法是绑定(bind)到组合框的值,并使用转换器创建将作为参数发送的类的特定对象。
XAML:
<StackPanel Name="StackPanel">
<ComboBox Name="FirstComboBox"/>
<ComboBox Name="SecondComboBox"/>
<Button Command="{Binding YourCommand}">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource ComboBoxesToComboClassConverter}">
<Binding ElementName="FirstComboBox" Path="SelectedValue"/>
<Binding ElementName="SecondComboBox" Path="SelectedValue"/>
</MultiBinding>
</Button.CommandParameter>
</Button>
</StackPanel>
转换器:
class Combo
{
public string FirstComboBoxValue { get; set; }
public string SecondComboBoxValue { get; set; }
}
class ComboBoxesToComboClassConverter: IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return new Combo()
{
FirstComboBoxValue = values[0].ToString(),
SecondComboBoxValue = values[1].ToString()
};
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
如果您使用 MVVM,每个 ComboBox 值都应该绑定(bind)到属性,因此您将在同一个类中同时拥有与按钮关联的命令和所需属性,因此无需传递任何内容。
关于c# - WPF 将多个参数传递给命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31628439/