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

时间:2018-08-08 08:35:14

标签: c# wpf caliburn.micro

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

Can方法会自动检查,但仅在加载窗口期间检查它。每次单击一次之后,我都需要检查一下。

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

XAML视图:

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

C#ViewModel:

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原理。

1 个答案:

答案 0 :(得分:2)

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

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与约定有关。由于您的Name的{​​{1}}属性设置为“ AddRecord”,因此框架会将其连接到Button方法和视图模型的AddRecord()属性场景。