CanExecute Caliburn方法不适用于嵌套属性

本文关键字:嵌套 属性 适用于 不适用 Caliburn 方法 CanExecute | 更新日期: 2023-09-27 18:22:29

我正在尝试使用Caliburn Micro CanExecute方法,根据是否在文本框中输入值来绑定要禁用或不禁用的保存按钮。

这是我的看法:

<TextBox Text="{Binding Current.Name}"/>
<Button Content="Save" Name="Save" />

我的POCO:

[ImplementPropertyChanged] (fody)
public partial class POCO: IEntity
{
    public int Id { get; set; }
    public string Name { get; set; }
}

我的ViewModel:

public void SetupViewModel()
{
    Current = new POCO();
}
public POCO Current { get; set; }
public bool CanSave => Current == null || !string.IsNullOrWhiteSpace(Current?.Name);

如果我设置了一个变量并将其绑定到视图中(让我们称之为POCOName),并将其传递到CanSave中,它就可以正常工作,这似乎只是嵌套属性的问题。有人有什么想法吗?

CanExecute Caliburn方法不适用于嵌套属性

Action约定功能使用x:Name指令而不是Name属性。

<TextBox Text="{Binding Current.Name}"/>
<Button Content="Save" x:Name="Save" />

更新
我已经尝试过使用Name属性了,它也可以工作,很抱歉给了你错误的信息。

CanExcute方法在您的情况下实际上是一个属性,例如,您需要通知属性已更改。

public string Name
{ 
    get { return _name; }
    set
    {
        _name = value;
        NotifyOfPropertyChange(nameof(Name));
        // when Name changed, check if it is null or whitespace
        NotifyOfPropertyChange(nameof(CanSave));
    }
}

通知CanExcute属性更改的位置取决于您的应用程序
您也可以使用CanExcute方法,每次参数值更改时都会调用它
有关Caliburn Micro Action的更多信息,请参阅All about Actions