我有一个XamDataPresenter(XamDataGrid)绑定到ViewModel中的一个集合:
XAML:
<igDP:XamDataPresenter x:Name="dataPresenter" DataSource="{Binding Path=AppServers, UpdateSourceTrigger=PropertyChanged}" IsSynchronizedWithCurrentItem="True">
</igDP:XamDataPresenter>
代码:
public ShellViewModel()
{
AppServers = new BindingListCollectionView(new BindingList<AppServer>(_context.GetAllAppServers()));
AppServers.CurrentChanged += new EventHandler(AppServers_CurrentChanged);
}
void AppServers_CurrentChanged(object sender, EventArgs e)
{
NotifyOfPropertyChange(() => CanSaveAppServers);
NotifyOfPropertyChange(() => CanDeleteAppServers);
}
CanSaveAppServers属性:
public bool CanSaveAppServers
{
get
{
return (_appServers.SourceCollection as BindingList<AppServer>).Any(x => x.ChangeTracker.State != ObjectState.Unchanged);
}
}
如果更改了集合的项目,则CanSaveAppServers属性应为false。但CanSaveAppServers如何调用?另一件事?还是错误的收藏类型?这不应该以某种方式自动完成吗?
提前致谢。
答案 0 :(得分:0)
如果您通过命名约定让Caliburn绑定,那么您有一个名为SaveAppServers
的公共方法。 Caliburn会创建一个绑定到ICommand
的{{1}},以便在点击该按钮时调用Button
的{{1}}。与此同时,ICommand
上有Execute()
方法,用于确定按钮是否已启用。
当您致电CanExecute()
时,最终会使ICommand
提升其NotifyOfPropertyChange(() => CanSaveAppServers)
事件,这会再次致电ICommand
,从而让WPF更新。 CanExecuteChanged
。