2

UserControlFrameworkElementイベントをビュー モデル コマンドにバインドするにはどうすればよいですか? 私は MVVM と Prism を使用しているので、ビュー モデルをビュー間で明確に分離するとよいでしょう。

私は複数のことを試しましたが、どれもうまくいきませんでした:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="FrameworkElement.Unloaded">
        <i:InvokeCommandAction Command="{Binding Unloaded}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

このチュートリアルも使用http://blog.functionalfun.net/2008/09/hooking-up-commands-to-events-in-wpf.html

local:FrameworkElementBehavior.UnloadedCommand="{Binding Unloaded}"

コード ビハインドにいくつかの機能を追加する以外に選択肢はありませんか?

上記の試行はどちらもエラーになりませんが、コマンドは実行されません。

ここに私のビューモデルがあります:

public class CustomerViewModel : PosViewModelBase
{
    public ICommand Unloaded
    {
        get { return new UnloadedCommand(); }
    }

    public CustomerViewModel()
    {

    }

    private class UnloadedCommand : ICommand
    {
        public bool CanExecute(object parameter)
        {
            return true;
        }

        public event EventHandler CanExecuteChanged;

        public void Execute(object parameter)
        {
            Debug.WriteLine("Customer stuff is out of view");
        }
    }
}
4

1 に答える 1

2

問題は Unloaded イベントにあると思います。

MSDN ページhttp://msdn.microsoft.com/en-us/library/ms754221.aspx#common_eventsから:

Unloaded は最後に発生し、プレゼンテーション ソースまたはビジュアルの親が削除されることによって開始されます。Unloaded が発生して処理されると、イベント ソースの親である要素 (Parent プロパティによって決定される)、または論理ツリーまたはビジュアル ツリーの上位にある特定の要素が既に設定解除されている可能性があります。つまり、データ バインディング、リソース参照、およびスタイルが通常または最後の既知の実行時の値に設定しないでください。

于 2012-06-07T18:03:41.933 に答える