ToolbarItem isEnabled属性在xaml中可用,而不是代码

时间:2018-02-20 14:48:10

标签: xamarin xamarin.forms

我有一个表单,用户可以在其中输入一些数据并将其保存到数据库中。我一直在尝试添加基本验证,使用户必须在每个字段中输入值。我希望我的保存按钮不可用,直到用户在每个表单中输入了一些信息。

这是我的按钮:

<ToolbarItem Name="MenuItem1" Order="Primary" Text="Save" Priority="1" Command="{Binding SaveDataCommand}" IsEnabled="{Binding CanSaveData}"/>

我可以访问XAML中的isEnabled属性,但这令人愤怒的是我无法重新更新此属性。按钮在我加载时告诉它的任何状态都会卡住。我检查了我的视图模型并返回一个正确的布尔值(将其打印到控制台),它只是无法更新按钮状态。

我甚至尝试添加一个强制更新已启用状态的新按钮,但这不会起作用

<ToolbarItem x:Name="whyxamarinwhy" Name="MenuItem1" Order="Primary" Text="Save" Priority="1" Command="{Binding SaveEvent}" IsEnabled="{Binding CanCreateEvent}"/>

whyxamarinwhy.isenabled = true; //I cannot access this property because it doesn't exist.

实现此功能的唯一方法是使用自定义渲染器吗?

1 个答案:

答案 0 :(得分:2)

  

MenuItem.IsEnabledProperty /供Xamarin.Forms平台内部使​​用。

您应该使用Command的{​​{1}} CanExecute来确定是否可以触发ToolbarItem方法。

由于您已将命令绑定到Execute,因此您可以切换该命令的SaveDataCommand的返回值,以确定是否应允许菜单项按钮触发附加命令。

你没有发布你的ViewModel,但是在内部类CanExecute实现中,有一些简单的工作:

ICommand