Xamarin ToolbarItem isEnabled属性在xaml中可用,而不是在代码中可用
我有一个表单,用户可以在其中输入一些数据并将其保存到数据库中。我一直在尝试添加基本验证,使用户必须在每个字段中输入一个值。我希望在用户在每个表单中输入某些信息之前,我的“保存”按钮不可用 这是我的按钮:Xamarin ToolbarItem isEnabled属性在xaml中可用,而不是在代码中可用,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我有一个表单,用户可以在其中输入一些数据并将其保存到数据库中。我一直在尝试添加基本验证,使用户必须在每个字段中输入一个值。我希望在用户在每个表单中输入某些信息之前,我的“保存”按钮不可用 这是我的按钮: <ToolbarItem Name="MenuItem1" Order="Primary" Text="Save" Priority="1" Command="{Binding SaveDataCommand}" IsEnabled="{Binding CanSaveData}"/>
<ToolbarItem Name="MenuItem1" Order="Primary" Text="Save" Priority="1" Command="{Binding SaveDataCommand}" IsEnabled="{Binding CanSaveData}"/>
实现此功能的唯一方法是使用自定义渲染器吗
MenuItem.IsEnabledProperty/供Xamarin.Forms平台内部使用
您应该使用工具栏项
的命令
的CanExecute
,以确定是否可以触发执行
方法
由于您已经将命令绑定到SaveDataCommand
,因此可以切换该命令的CanExecute
返回,以确定是否允许菜单项按钮触发附加的命令
您没有发布ViewModel,而是在一个内部类ICommand
实现中发布了如下内容:
static bool SaveDataCommandCanExecute = true;
class SaveDataCommand : ICommand
{
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
// your code needs to toggle SaveDataCommandCanExecute to determine if the Execute method can be triggered
return SaveDataCommandCanExecute;
}
public void Execute(object parameter)
{
// Do something
}
}
我不知道这里发生了什么,但对我来说,它甚至没有出现在XAML上。根据此属性,是供XF平台内部使用的。尽管如此,您仍可以通过
CanExecute
命令的委托处理用户触发操作的能力,而不是启用/禁用按钮本身。@Diegrafaelsouza我该怎么做,您能发布答案吗?我可以看到要调用的方法,但在SaveData.raisecancecutechanged()中我似乎无法与它们交互代码>或SaveEvent.CanExecute()代码>@Sushingover已经完成了。它是完美的=),甚至可以使用它的XF实现(Xamarin.Forms.Command)。比如Command SaveCommand=new命令(yourExecuteSave方法,YourCanExecuteMethod)
并且在影响“可以执行”状态的每个属性上,您也可以调用“SaveCommand.ChangeCanExecute()`@没错,出于某种原因,我总是首先想到ICommand
这是战士的方式
!它也非常适合。用于启用/禁用事件(但这从来不是我的问题),我发现问题在于我的数据绑定,而不是提升值已更改(我是mvvm新手,从未对其进行过很好的解释)。实际上,我已经成功地启用/禁用了按钮,如果xamarin不想让我使用IsEnabled
属性,我就不用担心了,他们给了我use:)
static bool SaveDataCommandCanExecute = true;
class SaveDataCommand : ICommand
{
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
// your code needs to toggle SaveDataCommandCanExecute to determine if the Execute method can be triggered
return SaveDataCommandCanExecute;
}
public void Execute(object parameter)
{
// Do something
}
}