如何使用 ICommand 在 Xamarin 中停用按钮

How to deactivate button in Xamarin With ICommand

我得到一个有 2 个按钮的应用程序。首先是计数,其次是 Xamarin 表单中的 "set 0"。我希望 upcountButton 在达到 512 的值时得到 Gray/Disabled。 这是我的代码:

    public ObservableCollection<NumberViewModel> Nummer { get; private set; } = new ObservableCollection<NumberViewModel>();
    private int _currentNumber;
    public int Current
    {
        get
        {
            return _currentNumber;
        }
        set
        {
            _currentNumber = value;
            OnPropertyChanged();
        }
    }

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

    Number Zahl = new Number();

    public CounterViewModel()
    {
        CountUpCommand = new Command(CountUp);
        DelCommand = new Command(SetZero);
    }

    public void SetZero()
    {
        Current = 0;
        Nummer.Add(new NumberViewModel { Num = Current});
        Checker(Current);

    }

    public void CountUp()
    {

            Current++;
            Nummer.Add(new NumberViewModel { Num = Current });
        Checker(current);


    }
    public void Checker(int check)
    {
        if (check > 512)
        {
            //button.grayout
        }
        else { }
    }

那么如何将它绑定到我的按钮的启用状态?

哦,我忘了我的 xaml 密码:

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

每个命令都有一个 CanExecute 方法。

当您从该方法 return false 时,相关按钮将显示为禁用。

只需确保调用 ChangeCanExecute 通知 UI 命令状态已更改。

例如:

public CounterViewModel()
{
    CountUpCommand = new Command(CountUp, CanCountUp);
}

public int Current
{
    get
    {
        return _currentNumber;
    }
    set
    {
        _currentNumber = value;
        OnPropertyChanged();
        CountUpCommand.ChangeCanExecute();
    }
}


public void CountUp()
{
    Current++; //will result in calling CanCountUp and updating button status
    Nummer.Add(new NumberViewModel { Num = Current });
}

public bool CanCountUp()
{
    return Current <= 512;  
}

P.S。您应该为 public 成员名称使用驼峰式命名,例如 Current 而不是 current.