Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

WPFでWindowが閉じられたときにViewModelの後始末メソッドを呼ぶ

$
0
0

そういう動きをするビヘイビアを作ればOKです。こんな感じで。

publicclass ViewModelCleanupBehavior : Behavior<Window>
{
    protectedoverridevoid OnAttached()
    {
        base.OnAttached();
        this.AssociatedObject.Closed += this.WindowClosed;
    }

    privatevoid WindowClosed(object sender, EventArgs e)
    {
        (this.AssociatedObject.DataContext as IDisposable)?.Dispose();
    }

    protectedoverridevoid OnDetaching()
    {
        base.OnDetaching();
        this.AssociatedObject.Closed -= this.WindowClosed;
    }
}

使い方はこんな感じ。

<Window x:Class="CloseAndDisposeSample.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:CloseAndDisposeSample"xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"mc:Ignorable="d"Title="MainWindow"Height="350"Width="525"><Window.DataContext><local:MainWindowViewModel /></Window.DataContext><i:Interaction.Behaviors><local:ViewModelCleanupBehavior /></i:Interaction.Behaviors><Grid></Grid></Window>

これでMainWindowViewModelがIDpsopsableを実装していれば、Windowが閉じられたときにDisposeメソッドが呼び出されます。

めでたしめでたし。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>