【C#, WPF】XMLデータをListViewに表示し、チェック項目のみXML保存させる

公開日: : 最終更新日:2015/10/20 Blog, Microsoft , ,

前回の続きというか、WPF版。

<Window x:Class="MyWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="100" />
        </Grid.RowDefinitions>
        <ListView x:Name="list">
            <ListView.View>
                <GridView>
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox IsChecked="{Binding IsSelect}" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="FullName" DisplayMemberBinding="{Binding FullName}" />
                    <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" />
                </GridView>
            </ListView.View>
        </ListView>
        <Button Content="Send" Grid.Row="1" Click="Button_Click" />
    </Grid>
</Window>
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        users = LoadUser();
        list.ItemsSource = users;
    }

    List<User> users;
    public class User
    {
        public bool IsSelect { get; set; }
        public string FullName { get; set; }
        public int Age { get; set; }
        public string Address { get; set; }
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        SaveUser(users.Where(x => x.IsSelect).ToList());
    }

    private const string filePath = @"C:\Users\Tak1wa\Desktop\hoge.xml";

    private List<User> LoadUser()
    {
        var serializer = new XmlSerializer(typeof(List<User>));
        if (!File.Exists(filePath))
        {
            var newUsers = new List<User>();
            newUsers.Add(new User() { IsSelect = true, FullName = "田中1", Age = 20, Address = "千葉1" });
            newUsers.Add(new User() { IsSelect = true, FullName = "田中2", Age = 21, Address = "千葉2" });
            newUsers.Add(new User() { IsSelect = true, FullName = "田中3", Age = 22, Address = "千葉3" });
            return newUsers;
        }
        using (var reader = new StreamReader(filePath))
        {
            return (List<User>)serializer.Deserialize(reader);
        }
    }

    private void SaveUser(List<User> users)
    {
        var serializer = new XmlSerializer(typeof(List<User>));
        using (var writer = new StreamWriter(filePath))
        {
            serializer.Serialize(writer, users);
        }
    }
}

面倒だったためコードビハインドで提示したのですが、
ItemsSourceのオブジェクトに対してIsSelect=Trueのものを検索してシリアライズしているだけなのでViewModelのデータソースをバインディングさせていたとしても同じような感じで出来ると思います。

関連記事

【iPhoneアプリ】リリース手順〜プロビジョニングプロファイルを作成する〜

リリース前にDistribution Provisioning Profileを作成する 手順

記事を読む

no image

Xamarin.Forms で ScrollView の中に Map を配置したとき、Androidで地図のスクロールが出来なくなる

iOSは問題ないけど、AndroidはScrollViewにタッチを持ってかれてる感じ。 カスタ

記事を読む

no image

Windows 10 IoT 系の概要、エディション、入手方法などを一度整理

Windows 10 IoT にここ最近振り回されているので、ここまで解釈した内容にて、まとメモ 正

記事を読む

no image

Visual Studio 2017 Version15.2 にアップデート後、Xamarin.iOS でビルドエラーが発生時の回避メモ

環境 Visual Studio Enterprise 2017 Version 15.2

記事を読む

AdMob,Nendメディエーション時の優先順位

先日リリースしたアプリでは勉強を兼ねて、 AdMob+Nendでのメディエーション広告を実装し

記事を読む

Hardware assisted virtualization and data execution protection must be enabled in the BIOS

MacBook Pro + Bootcamp + Windows10 で Docker for Wi

記事を読む

Xamarin.Forms + Visual Studio Team Services ビルドタスクで自動バージョンアップ

Visual Studio Team Services で Xamarin.Forms の継続的デリ

記事を読む

no image

Microsoft Flow 入門

社内LT用

記事を読む

Visual Studio 2015 + PHP Tools for Visual Studio で App Service for Linux へデプロイ

発端はこれ。 https://social.msdn.microsoft.com/Forums/ja

記事を読む

no image

Raspberry Pi 3 Model B 各OS、動画プレイヤーでの再生比較

ベンチマークではなく、ただ感想をメモしただけ。 Windows 10 IoT Core C#

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑