.NET MAUIで前回のオイル交換日を記録するアプリ

C# コンピュータ
C#
メモ(オイル交換)と日付を記録するアプリを作成してみます。

ソースコード

ファイル名:MainPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="LastOilChange.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">

            <HorizontalStackLayout
                Spacing="25"
                Padding="30,0"
                HorizontalOptions="Center">
                <Label
                    x:Name="MemoLbl1"
                    FontSize="24"
                    Text="メモ1"
                    HorizontalOptions="Center" />

                <Button
                    x:Name="EditMemoBtn1"
                    Text="編集"
                    Clicked="OnEditMemoBtn1Clicked"
                    HorizontalOptions="Center" />
                
                <DatePicker
                        x:Name="DatePicker1"
                        DateSelected="OnDatePicker1Slected" />

            </HorizontalStackLayout>
            <HorizontalStackLayout
                Spacing="25"
                Padding="30,0"
                HorizontalOptions="Center">
                <Label
                    x:Name="MemoLbl2"
                    FontSize="24"
                    Text="メモ2"
                    HorizontalOptions="Center" />

                <Button
                    x:Name="EditMemoBtn2"
                    Text="編集"
                    Clicked="OnEditMemoBtn2Clicked"
                    HorizontalOptions="Center" />

                <DatePicker
                        x:Name="DatePicker2"
                        DateSelected="OnDatePicker2Slected" />

            </HorizontalStackLayout>
            <HorizontalStackLayout
                Spacing="25"
                Padding="30,0"
                HorizontalOptions="Center">
                <Label
                    x:Name="MemoLbl3"
                    FontSize="24"
                    Text="メモ3"
                    HorizontalOptions="Center" />

                <Button
                    x:Name="EditMemoBtn3"
                    Text="編集"
                    Clicked="OnEditMemoBtn3Clicked"
                    HorizontalOptions="Center" />

                <DatePicker
                        x:Name="DatePicker3"
                        DateSelected="OnDatePicker3Slected" />

            </HorizontalStackLayout>

        </VerticalStackLayout>
    </ScrollView>

</ContentPage>

ファイル名:MainPage.xaml.cs

using System.Text.Json;

namespace LastOilChange;

public class MemoRecord
{
    public DateTime Date { get; set; }
    public string Memo { get; set; }
}
public class DataContext
{
    public List<MemoRecord> MemoRecords { get; set; } = new List<MemoRecord>();

    string jsonPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/LastOilChange.json";

    public DataContext()
    {
        if (System.IO.File.Exists(jsonPath)) {
            string jsonString = File.ReadAllText(jsonPath);
            MemoRecords = JsonSerializer.Deserialize<List<MemoRecord>>(jsonString)!;
        }
        else {
            MemoRecords.Add(new MemoRecord {
                Date = DateTime.Now,
                Memo = "オイル交換",
            });;
            MemoRecords.Add(new MemoRecord
            {
                Date = DateTime.Now,
                Memo = "メモ2",
            });
            MemoRecords.Add(new MemoRecord
            {
                Date = DateTime.Now,
                Memo = "メモ3",
            });
            string jsonString = JsonSerializer.Serialize(MemoRecords);
            File.WriteAllText(jsonPath, jsonString);
        }
    }
    public async Task<long> UpdateJson()
    {
        using FileStream createStream = File.Create(jsonPath);
        await JsonSerializer.SerializeAsync(createStream, MemoRecords);
        await createStream.DisposeAsync();
        return (new System.IO.FileInfo(jsonPath)).Length;
    }
}

public partial class MainPage : ContentPage
{
    DataContext data = null;

    public MainPage()
    {
        InitializeComponent();
        this.Loaded += (_, _) =>
        {
            data = new DataContext();
            MemoLbl1.Text = data.MemoRecords[0].Memo;
            DatePicker1.Date = data.MemoRecords[0].Date;
            MemoLbl2.Text = data.MemoRecords[1].Memo;
            DatePicker2.Date = data.MemoRecords[1].Date;
            MemoLbl3.Text = data.MemoRecords[2].Memo;
            DatePicker3.Date = data.MemoRecords[2].Date;
        };
    }

    private async void OnEditMemoBtn1Clicked(object sender, EventArgs e)
    {
        string memo = MemoLbl1.Text;
        string result = await DisplayPromptAsync("メモ", "変更", initialValue: memo);
        if (result != null)
        {
            if (data.MemoRecords[0].Memo != result)
            {
                data.MemoRecords[0].Memo = result;
                await data.UpdateJson();
                MemoLbl1.Text = data.MemoRecords[0].Memo;
            }
        }
    }
    private async void OnDatePicker1Slected(object sender, EventArgs e)
    {
        if (data.MemoRecords[0].Date != DatePicker1.Date) {
            data.MemoRecords[0].Date = DatePicker1.Date;
            await data.UpdateJson();
        }
    }
    private async void OnEditMemoBtn2Clicked(object sender, EventArgs e)
    {
        string memo = MemoLbl2.Text;
        string result = await DisplayPromptAsync("メモ", "変更", initialValue: memo);
        if (result != null)
        {
            if (data.MemoRecords[1].Memo != result)
            {
                data.MemoRecords[1].Memo = result;
                await data.UpdateJson();
                MemoLbl2.Text = data.MemoRecords[1].Memo;
            }
        }
    }
    private async void OnDatePicker2Slected(object sender, EventArgs e)
    {
        if (data.MemoRecords[1].Date != DatePicker2.Date)
        {
            data.MemoRecords[1].Date = DatePicker2.Date;
            await data.UpdateJson();
        }
    }
    private async void OnEditMemoBtn3Clicked(object sender, EventArgs e)
    {
        string memo = MemoLbl3.Text;
        string result = await DisplayPromptAsync("メモ", "変更", initialValue: memo);
        if (result != null)
        {
            if (data.MemoRecords[2].Memo != result)
            {
                data.MemoRecords[2].Memo = result;
                await data.UpdateJson();
                MemoLbl3.Text = data.MemoRecords[2].Memo;
            }
        }
    }
    private async void OnDatePicker3Slected(object sender, EventArgs e)
    {
        if (data.MemoRecords[2].Date != DatePicker2.Date)
        {
            data.MemoRecords[2].Date = DatePicker2.Date;
            await data.UpdateJson();
        }
    }
}

実行


「編集」ボタンを押すとメモが編集できますので「オイル交換」から任意の要件に変更することが出来ます。日付を変更する場合は日付をクリックしてみてください。
項目の値を変更する都度内容をテキストファイル(json形式)で保存しています。保存先をWindowsぽくMyDocumentsを指定していますが、Androidではどこに保存されているか不明です。ただアプリをアンインストールすると初期化されるのでjsonファイルも削除されていると思われます。

コメント