2008/09/19 19:28

RecentFiles

Application 에 자주 사용되는 Recent Files 의 WPF 구현입니다.

사용자 삽입 이미지

사용법

Reference
Axis.Windows.RecentFiles in Axis.Utils.dll

Settings 에 RecentFiles 아이템을 추가합니다.

이름 RecentFiles
형식 Axis.Windows.RecentFiles
기본값 <RecentFiles />


XAML

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:settings="clr-namespace:Axis.Print.Properties"

    <settings:Settings x:Key="settings" />

           <Style x:Key="RecentFilesItemContainerStyle">
                <Setter Property="MenuItem.Header" Value="{Binding FileName}" />
                <Setter Property="MenuItem.InputGestureText" Value="" />
                <Setter Property="MenuItem.Command" Value="Open" />
                <Setter Property="MenuItem.CommandParameter" Value="{Binding FileName}" />
            </Style>
           
            <Style x:Key="RecentFilesMenuItemStyle" TargetType="MenuItem">
                <Setter Property="Header" Value="Recent Files" />
                <Setter Property="IsEnabled" Value="{Binding RelativeSource={RelativeSource Self}, Path=HasItems}" />
                <Setter Property="ItemContainerStyle" Value="{StaticResource RecentFilesItemContainerStyle}" />
                <Setter Property="ItemsSource" Value="{Binding Source={StaticResource settings}, Path=Default.RecentFiles}" />
            </Style>

<MenuItem x:Name="RecentFilesMenuItem" Style="{StaticResource RecentFilesMenuItemStyle}" />


Code

private void OpenExecuted(object sender, ExecutedRoutedEventArgs e)
{
    string fileName = e.Parameter as string;
    if (string.IsNullOrEmpty(fileName))
    {
        OpenFileDialog dialog = new OpenFileDialog();
        if (dialog.ShowDialog().GetValueOrDefault())
        {
            fileName = dialog.FileName;
        }
    }

    if (string.IsNullOrEmpty(fileName))
    {
        // TODO: Open file here

        Settings.Default.RecentFiles.Add(fileName);
    }
}

Application
종료시 Settings.Default 를 저장하여야 합니다.

=====
참고
RecentFiles 는 Settings.RecentFiles 에 XML 구문으로 저장합니다.

<RecentFiles>
    <RecentFile FileName="..." LastAccessTime="..." />
    <RecentFile FileName="..." LastAccessTime="..." />
</RecentFiles>


===
RecentFiles을 업데이트 하기 위해서는 다음의 한가지 메소드만을 사용합니다.
기존에 파일이 있는 경우는 LastAccessTime 만을 현재 시각으로 업데이트 합니다.

Settings.Default.RecentFiles.Add(fileName);
===
UI 에서는 MenuItem.ItemsSource 에 RecentFiles 를 바인딩하였습니다.
Sort를 LastAccessTime Desc 로 설정하면 최근 사용 순서대로 소팅되어 표시됩니다.
Trackback 1 Comment 0