WPF: как передать 2 свойства текста из 2 TextBoxes в мою команду Button - PullRequest
0 голосов
/ 07 октября 2019

Итак, у меня есть 2 TextBox и кнопка с простой командой:

    <Button ToolTip="Save" Command="{Binding SaveCommand}"/>   

И я хочу передать этой команде 2 Text свойства из моих 2 TexBox.

Если я хочу передать только 1 Text свойство, я использовал это command:

CommandParameter="{Binding Text, ElementName=yourTextBox}"

Любой шанс сделать это без Converter?

Ответы [ 2 ]

2 голосов
/ 07 октября 2019

Самый простой способ сделать это - просто привязать свойство Text двух текстовых полей к строкам в модели представления и обработать эти строки внутри метода Execute () вашей ICommand.

View:

<TextBox x:Name="firstTextBox" Text="{Binding FirstText}"/>
<TextBox x:Name="secondTextBox" Text="{Binding SecondText}"/>

Просмотр модели:

public string FirstText { get; set; } //Also invoke PropertyChanged event if necessary
public string SecondText { get; set; }
1 голос
/ 07 октября 2019

Вы можете попробовать сделать следующее. Сначала создайте конвертер для нескольких значений, реализовав интерфейс IMultiValueConverter:

public class MultiTextConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        //logic to aggregate two texts from object[] values into one object
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        return new[] { Binding.DoNothing };
    }
}

Чем использовать его в xaml. Объявите экземпляр конвертера в Window или App ресурсах

<ResourceDictionary>                    
    <MultiTextConverter x:Key="multiTextConverter"/>
</ResourceDictionary>

и используйте в кнопке CommandParameter привязку

<Button ToolTip="Save" Command="{Binding SaveCommand}">
   <Button.CommandParameter>
       <MultiBinding Converter="{StaticResource multiTextConverter}">
           <Binding ElementName="yourTextBox1" Path="Text"/>
           <Binding ElementName="yourTextBox2" Path="Text"/>
       </MultiBinding>
   </Button.CommandParameter>
</Button>
...