如何使用 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
.
我得到一个有 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
.