前提
C# WPF 初心者です。
用語の誤用/的外れな質問ありましたらご容赦ください。
表題/Memoを入力して、追加すると、下のリストボックスに内容が追加されるアプリを作成しています。
左側リストボックスを選択すると、右側のリストボックスに内容が表示される。
[]
実現したいこと
アプリ内で追加したリスト内容を保存し、アプリを再起動しても追加した内容が出てくるようにしたいです。
Settings.settingsを使用するのが一番楽かと思いますが、
リストボックスは、ソースコード内ではコレクションをバインドしています。
Settings.settingsにコレクションを追加することはできるのでしょうか?
該当のソースコード
C#
1using Prism.Mvvm; 2using System; 3using System.ComponentModel; 4using Reactive.Bindings; 5using System.Linq; 6using System.Reactive.Linq; 7using System.Collections.ObjectModel; 8 9namespace ListBoxデータ保存.ViewModels 10{ 11 public class MainWindowViewModel : BindableBase 12 { 13 public ReactiveProperty<string> Txt_Title { get; set; } = new ReactiveProperty<string>(); 14 public ReactiveProperty<string> Txt_Memo { get; set; } = new ReactiveProperty<string>(); 15 public ObservableCollection<Task> TaskList { get; set; } 16 17 18 //コマンド 19 public ReactiveCommand AddListCommand { get; private set; } 20 21 public MainWindowViewModel() 22 { 23 TaskList = new ObservableCollection<Task>(); 24 25 //コマンド生成 26 AddListCommand = Txt_Title 27 .Select(x => !string.IsNullOrEmpty(x)) 28 .ToReactiveCommand(); 29 30 //コマンド動作定義 31 AddListCommand.Subscribe(_ => 32 { 33 TaskList.Add(new Task { Title = Txt_Title.Value, Memo = Txt_Memo.Value }); 34 35 Txt_Title.Value = ""; 36 Txt_Memo.Value = ""; 37 }); 38 } 39 } 40 41 42 public class Task : BindableBase 43 { 44 public string Title { get; set; } 45 public string Memo { get; set; } 46 47 public ReactiveProperty<bool> IsSelected { get; set; } = new ReactiveProperty<bool>(); 48 } 49 50} 51
XAML
1<Window x:Class="ListBoxデータ保存.Views.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:prism="http://prismlibrary.com/" 5 prism:ViewModelLocator.AutoWireViewModel="True" 6 Title="{Binding Title}" Height="350" Width="525" > 7 8 <Window.Resources> 9 <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> 10 </Window.Resources> 11 12 <Grid> 13 <Grid.ColumnDefinitions> 14 <ColumnDefinition /> 15 <ColumnDefinition Width="2*" /> 16 </Grid.ColumnDefinitions> 17 <Grid.RowDefinitions> 18 <RowDefinition Height="Auto" /> 19 <RowDefinition /> 20 </Grid.RowDefinitions> 21 <Grid> 22 <Grid.ColumnDefinitions> 23 <ColumnDefinition Width="Auto" /> 24 <ColumnDefinition /> 25 </Grid.ColumnDefinitions> 26 <Label 27 Margin="5" 28 VerticalAlignment="Center" 29 Content="表題" HorizontalAlignment="Right" Width="34" /> 30 <TextBox 31 Grid.Column="1" 32 VerticalAlignment="Center" 33 Text="{Binding Txt_Title.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 34 TextWrapping="Wrap" Margin="10,0,10,0" /> 35 </Grid> 36 <Grid Grid.Column="1"> 37 <Grid.ColumnDefinitions> 38 <ColumnDefinition Width="Auto" /> 39 <ColumnDefinition /> 40 <ColumnDefinition Width="Auto" /> 41 </Grid.ColumnDefinitions> 42 <Label 43 Margin="5" 44 VerticalAlignment="Center" 45 Content="Memo" HorizontalAlignment="Right" Width="44" /> 46 <TextBox 47 Grid.Column="1" 48 Margin="5" 49 VerticalAlignment="Center" 50 Text="{Binding Txt_Memo.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 51 TextWrapping="Wrap" /> 52 <Button 53 Grid.Column="2" 54 MinWidth="56" 55 Margin="5" 56 Command="{Binding AddListCommand}" 57 Content="追加" HorizontalAlignment="Left" Width="56" /> 58 </Grid> 59 60 <Grid Grid.Row="1"> 61 <ListBox 62 x:Name="lst_Title" 63 Margin="5" 64 ItemsSource="{Binding TaskList}" 65 DisplayMemberPath="Title" 66 IsSynchronizedWithCurrentItem="True" 67 SelectionMode="Extended"> 68 69 <ListBox.ItemContainerStyle> 70 <Style TargetType="ListBoxItem"> 71 <Setter Property="IsSelected" Value="{Binding IsSelected.Value}" /> 72 </Style> 73 </ListBox.ItemContainerStyle> 74 </ListBox> 75 76 </Grid> 77 78 <Grid Grid.Row="1" Grid.Column="1" > 79 <ListBox 80 81 Margin="5" 82 ItemsSource="{Binding TaskList}"> 83 <ListBox.ItemContainerStyle> 84 <Style TargetType="ListBoxItem"> 85 <Setter Property="Visibility" Value="{Binding IsSelected.Value, Converter={StaticResource BooleanToVisibilityConverter}}" /> 86 </Style> 87 </ListBox.ItemContainerStyle> 88 <ListBox.ItemTemplate> 89 <DataTemplate> 90 <StackPanel> 91 <TextBlock FontWeight="Bold" Text="{Binding Title}" /> 92 <TextBlock Text="{Binding Memo}" /> 93 </StackPanel> 94 </DataTemplate> 95 </ListBox.ItemTemplate> 96 </ListBox> 97 </Grid> 98 99 </Grid> 100</Window> 101
補足情報(FW/ツールのバージョンなど)
OS:win10
.NET Framework:4.7.2
Visual Studio 2019
回答1件
あなたの回答
tips
プレビュー