Интерфейс ICommand с параметрами не работает - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь согреться с помощью ICommand-Data Binding.Для этого я сделал приложение, которое должно работать так: у меня есть 2 кнопки.Один из них «+1», он просто считает.Второй - «Multipy», который должен умножать значение на себя.Так, например: я нажимаю первый баттен 3 раза.теперь я нажимаю вторую кнопку: она составляет 3 * 3, и мы получили 9 в качестве нового значения.Первый butten работает, и я полагаю, что второй тоже не так уж и плох, но я не могу дать ему параметр, когда он выполняется.посмотрите:

public class CounterViewModel : BaseViewModel
{

    public ObservableCollection<NumberViewModel> Nummer { get; private set; } = new ObservableCollection<NumberViewModel>();
    int current = 0;

    public ICommand CountUpCommand { get; private set; }
    public ICommand MultiplyCommand { get; private set; }
    public ICommand DelCommand { get; private set; }

    Number Zahl = new Number();

    public CounterViewModel()
    {
        CountUpCommand = new Command(CountUp);
        DelCommand = new Command(SetZero);
        //MultiplyCommand = new Command<int>(Multiply).Execute(current); 
        //MultiplyCommand = new Command<int>(current => Multiply(current));
        // Both doesen´t work
    }


    public void CountUp()
    {
        // current = Nummer.Count + 1;
        current = current + 1;
        Nummer.Add(new NumberViewModel { Num = current });
    }

    public void Multiply(int _multiply)
    {
        current = _multiply * _multiply;
        Nummer.Add(new NumberViewModel { Num = current });
    }

также здесь мой "Number.cs":

public class Number
{

    public int Num { get; set;}

} 

и для интересующего моего файла xaml:

<StackLayout>
        <Button Text="+1" Command="{Binding CountUpCommand}" />
        <Button Text="Erg x Erg" Command="{Binding MultiplyCommand}"/>
        <Button Text="DEL" Command="{Binding DelCommand}" />
    </StackLayout>
<Label Text="--------------" />
<StackLayout>
    <ListView ItemsSource="{Binding Nummer}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell 
                Text="{Binding Num}" 
                />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</StackLayout>

ноя не знаю, если это несерьезно.ты можешь мне помочь?

1 Ответ

0 голосов
/ 15 октября 2018

В вашей привязке команды не указан какой-либо параметр команды, поэтому он не будет работать.

Вам необходимо указать его в своем файле xaml следующим образом.

 <Button Text="Erg x Erg" Command="{Binding MultiplyCommand}" CommandParameter="{Binding CurrentNumber}"/>

Для этогодля работы вам также необходимо обновить модель представления с правильным свойством Number:

private int _currentNumber;
public int CurrentNumber
{
    get
    {
        return _currentNumber;
    }
    set
    {
        _currentNumber = value;
        OnPropertyChanged(nameof(CurrentNumber));
        // or (depending on if the Method uses the [CallerMemberName] attribute)
        OnPropertyChanged();
    }
}


public void CountUp()
{
    // current = Nummer.Count + 1;
    CurrentNumber += Current + 1;
    Nummer.Add(new NumberViewModel { Num = CurrentNumber });
}

public void Multiply(int multiplyParameter)
{
    CurrentNumber = multiplyParameter * multiplyParameter;
    Nummer.Add(new NumberViewModel { Num = CurrentNumber});
}

Синтаксис RaisePropertyChanged может измениться в зависимости от используемой вами инфраструктуры MVVM, но это идея.

...