【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のデータソースをバインディングさせていたとしても同じような感じで出来ると思います。

関連記事

【.NET】16進数文字列から色を設定する

文字列→Colorクラスへの変換メモ プログラム上でFromArgbメソッドに16

記事を読む

Package ‘Win10SDK_10.0.14393.33,version=10.0.14393.3300’ failed to install.

Visual Studio 2017 RC1 でUWPアプリケーションのコンポーネントインストールす

記事を読む

no image

FixedDocumentの印刷およびXPS形式での保存

こんにちは。 以前、XAMLファイルを帳票テンプレートとして動的ロードする記事を掲載しました。

記事を読む

no image

macOSのVSTSビルドエージェント構築過程で、type initializeで例外が発生し接続に失敗する問題の対応

macOS Sierra (10.12.4) Deploy an agent on OSX Xa

記事を読む

シマンテックインストール時に「指定されたパスが空です。」

Windows10 64bit, Symantec Endpoint Protection はおそら

記事を読む

【iPhoneアプリ】リリース手順〜審査申し込み〜

初めてiPhoneアプリを作成したがリリース手順が 手元の参考書と全然違って困ったのでメモ。

記事を読む

no image

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

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

記事を読む

no image

BOT向け自然言語処理サービスまとめ

自然言語処理 自然言語処理(しぜんげんごしょり、英語: natural language p

記事を読む

no image

【解決】Visual Studio 2015 Update1 の Xamarin.Forms でインテリセンスを使いたい

前回保留になっていた問題が解決したのでメモっときます。 Visual Studio 2015 Up

記事を読む

【.NET】【WPF/XAML】ローカルPDFを画面に表示する

[crayon-5b4d2cfbe68f4201699918/] [vb] Public

記事を読む

Message

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

PAGE TOP ↑