感謝您的第一反應。我試過了,它工作。我沒有使用附加的行爲。我使用了EventTrigger。MVVM Light Messenger多次執行動作
的xmlns:交互= 「CLR-名稱空間:System.Windows.Interactivity;裝配= System.Windows.Interactivity」
<interactivity:Interaction.Triggers>
<!-- In order to Call Cleanup in ViewModel to unregister Messenger. -->
<interactivity:EventTrigger EventName="Unloaded">
<interactivity:InvokeCommandAction Command="{Binding ViewUnloadCommand}" />
</interactivity:EventTrigger>
</interactivity:Interaction.Triggers>
然後我的視圖將調用視圖模型的命令來註銷信使當該視圖被卸載。
再次感謝。
感謝Laurent爲您在MVVM燈上的精彩工作。
我一直在使用這個框架的WPF項目。然後我遇到了這個問題。我試圖在Google,MSDN和StackOverFlow上搜索它。當在ViewModel和View之間使用Messgener時,我發現了這個解決方案。我會在CodeBehind文件中做這樣的事情,在Unloaded事件處理程序中調用Unregister。
但是,當我在ViewModel中這樣做,當我應該調用Unregister或Cleanup?因爲當它發生時我仍然需要再次收到此消息。但我不希望多次只收到一次這個消息。
在此先感謝。
/// <summary>
/// Register to be observer of TodoItems change notification receiver.
/// </summary>
private void RegisterTodoItemsChangedNotification()
{
Messenger.Default.Register<UnfinishedTodoItemTreeViewModel>(this, UnfinishedTodoItemTreeViewModel.RelatedTodoItemsChangedMessageToken, itemTreeViewModel =>
{
if (itemTreeViewModel.ActionCategory == UnfinishedTodoItemTreeViewModel.TodoItemActionCategory.Done)
{
DecreaseRelatedFilterTodoItemCount(itemTreeViewModel.FilterType);
AllTodoItemCount -= 1;
}
else if (itemTreeViewModel.ActionCategory == UnfinishedTodoItemTreeViewModel.TodoItemActionCategory.Undone)
{
IncreaseRelatedFilterTodoItemCount(itemTreeViewModel.FilterType);
AllTodoItemCount += 1;
}
});
}
感謝您的評論。我會嘗試一下並儘快得到結果。 – Hui
再次感謝。你剛給我看了一個正確的方向。它實際上工作。但我沒有使用附加的行爲。我使用EventTrigger來調用ViewModel中的命令來取消註冊Messenger。 – Hui