【问题标题】:ToolbarItem isEnabled property is available in xaml, not codeToolbarItem isEnabled 属性在 xaml 中可用,而不是代码
【发布时间】:2018-02-20 23:33:45
【问题描述】:

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

这是我的按钮:

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

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

【问题讨论】:

  • 我不知道这里发生了什么,但对我来说,它甚至不会出现在 XAML 上。根据Microsoft docs,此属性仅供XF平台内部使​​用。尽管如此,您可以通过CanExecute 命令的委托来处理用户触发操作的能力,而不是启用/禁用按钮本身。
  • @DiegoRafaelSouza 我将如何去做,你能发布答案吗?我可以看到要调用的方法,但是无论如何我似乎都无法与它们进行交互SaveData.RaiseCanExecuteChanged();SaveEvent.CanExecute();
  • @SushiHangover 已经做到了。太完美了=)

标签: xamarin xamarin.forms


【解决方案1】:

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

您应该使用ToolbarItemCommandCanExecute 来确定是否可以触发Execute 方法。

由于您已经将命令绑定到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
    }
}

【讨论】:

  • 或者甚至使用它的 XF 实现 (Xamarin.Forms.Command)。像Command SaveCommand = new Command(YourExecuteSaveMethod, YourCanExecuteMethod); 一样,在影响“可以执行”状态的每个属性上,您还可以调用`SaveCommand.ChangeCanExecute();`
  • @DiegoRafaelSouza 是的,出于某种原因,我总是首先想到 ICommand... ;-)
  • warrior way!它也非常适合。
  • 适用于启用/禁用事件(但这从来不是我的问题),我发现问题出在我的数据绑定上,而不是提出值已更改(我是 mvvm 的新手,它从来没有解释得很好)。我实际上已经设法让按钮启用/禁用,如果 xamarin 不希望我使用 IsEnabled 属性,他们不会打扰我使用 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
相关资源
最近更新 更多