WPF Caliburn:识别集合项的值何时更改

时间:2011-03-30 07:18:44

标签: wpf collections action caliburn

我有一个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如何调用?另一件事?还是错误的收藏类型?这不应该以某种方式自动完成吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您通过命名约定让Caliburn绑定,那么您有一个名为SaveAppServers的公共方法。 Caliburn会创建一个绑定到ICommand的{​​{1}},以便在点击该按钮时调用Button的{​​{1}}。与此同时,ICommand上有Execute()方法,用于确定按钮是否已启用。

当您致电CanExecute()时,最终会使ICommand提升其NotifyOfPropertyChange(() => CanSaveAppServers)事件,这会再次致电ICommand,从而让WPF更新。 CanExecuteChanged