我正在使用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原理。
答案 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()
属性场景。