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

関連記事

no image

Microsoft.OData.Clientでフォーム認証を行う

構成 サーバー ** Azure API Apps ** ASP.NET Web API クライ

記事を読む

no image

【.NET】イベントのサブスクライブとサブスクライブ解除

.NETでイベントをハンドルする方法 サブスクライブ void CustomEven

記事を読む

Xamarin.FormsのTabbedPageでバッジを表示する

iOSのタブバーはNative側でバッジ機能があるのだが、Androidにはそもそもバッジが無いらし

記事を読む

no image

Xamarin.Forms で Opacityを設定したGridの表示・非表示を切り替えると、Androidで例外が発生する(Xamarin.Forms 2.3.3.193)

Xamarin 2.3.3.163 あたりから発生するようになったバグ情報があり 実行環境は 2.3

記事を読む

no image

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

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

記事を読む

no image

【iPhoneアプリ】背景画像を設定する

ImageResourceにBg.pngという背景画像を登録しておく 背景を設定するタイミング

記事を読む

no image

【UWP】矢印キーでのフォーカス移動

FocusManagerで上下左右のフォーカス遷移が出来るので、その仕組みを利用してやるビヘイビアを

記事を読む

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

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

記事を読む

VisualStudio2015でiOSアプリケーション開発

こんにちは。 Windows10にアップグレードしました。 VisualStudioも201

記事を読む

【ストアアプリ】画像の光学式ズーム

こんにちは。 スマートデバイスといえばタッチ操作、ということで 今日はWindowsストアアプリ

記事を読む

Message

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

PAGE TOP ↑