我如何使用 Caliburn 在事件发生后默认检查方法?

How can I use Caliburn to check a method by default after an event?

我正在使用 Caliburn.Micro XAML 框架。我有一个 Button,我需要在每次点击后检查它是否应该保持启用状态 => 每次点击都会从集合中删除一个对象,当它为空时,按钮必须被禁用。

Can 方法检查是自动的,但它只在 window 加载期间检查。我需要在每次点击后一遍又一遍地检查它。

具体来说,每次点击后我都需要检查是否ObservableCollection.Count > 0,如果不是,则禁用此Button

XAML 查看:

<Button x:Name="AddRecord" IsEnabled="{Binding CanAddRecord}"/> 

C# 视图模型:

public bool CanAddRecord()
{// debugging does not go here, thats the PROBLEM i need to solve
    return Collection.Count > 0
}
public void AddRecord()
{// here it is OK, debugging goes here properly
    Collection.Add(someObject);
}

问题:在每次单击按钮后,默认情况下使用 Caliburn 检查 CanAddRecord 方法是否有一些优雅的方法?

注意:我尽量避免 PropertyChanged 事件和类似事件。因为它否定了Caliburn原理。

而不是绑定 IsEnabled 属性,您应该添加一个 CanAddRecord 属性 到您的视图模型,并为此引发 PropertyChanged 事件在你的 AddRecord() 方法中:

public ObservableCollection<int> Collection { get; } = new ObservableCollection<int>();

public void AddRecord()
{
    Collection.Add(1);
    NotifyOfPropertyChange(nameof(CanAddRecord));
}

public bool CanAddRecord => Collection.Count == 0;

XAML:

<Button x:Name="AddRecord" Content="Add" />

这应该在将项目添加到源集合时禁用 Button

Caliburn.Micro 都是关于约定的。由于你的ButtonName属性设置为"AddRecord",框架会将其连接到AddRecord()方法和CanAddRecord属性 为您在幕后的视图模型。