0

ViewModel のコレクションにバインドされた XamDataPresenter (XamDataGrid) があります。

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 はどのように呼び出されるのでしょうか? 別のイベント?または間違ったコレクションタイプですか?これは何らかの方法で自動的に行われるべきではありませんか?

前もって感謝します。

4

1 に答える 1

0

命名規則に従って Caliburn をバインドさせる場合は、 という名前のパブリック メソッドがありSaveAppServersます。CaliburnICommandは にバインドされた を作成Buttonし、ボタンがクリックされるとICommandExecute()呼び出されるようにします。それまでの間、ボタンが有効かどうかを判断するために使用されるCanExecute()メソッドがあります。ICommand

を呼び出すとNotifyOfPropertyChange(() => CanSaveAppServers)、イベントが発生し、再度呼び出すことで WPF が更新され、内部で が取得さICommandCanExecuteChangedます。CanExecute()CanSaveAppServers

于 2011-05-08T06:23:24.660 に答える