Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin ToolbarItem isEnabled属性在xaml中可用,而不是在代码中可用_Xamarin_Xamarin.forms - Fatal编程技术网

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
    }
}