前提
バインド機能を使用して、設定ファイルに記載の「PC名及びフォルダ名」を、チェックボックス付きで画面に表示する
画面イメージ
設定ファイルの内容
┗カンマ区切りで 複数の「PC名及びフォルダ名」 を記載
手順(例)
1.バインド用のデータであるクラス「PcAndFolder.cs」を新規作成する
┗クラスをpublicにする
┗バインドさせるメンバを定義する ※ここではPcAndFolderName
●PcAndFolder.cs
public class PcAndFolder
{
public string PcAndFolderName { get; set; }
}
2.設定ファイルを読み込むクラス「IniFile.cs」を新規作成する
参考
https://note.dokeep.jp/post/csharp-inifile-read/
●IniFile.cs
using System.IO;
using System.Runtime.InteropServices;
public class IniFile
{
[DllImport("kernel32.dll")]
public static extern uint GetPrivateProfileString(
string lpAppName, string lpKeyName, string lpDefault,
StringBuilder lpReturnedString, uint nSize, string lpFileName);
private readonly StringBuilder _builder = new StringBuilder(255);
public string FullName { get; set; }
public IniFile(string filePath)
{
FullName = Path.GetFullPath(filePath);
}
public string Read(string section, string key, string defaultValue = null)
{
_builder.Clear();
GetPrivateProfileString(section, key, defaultValue, _builder, 255, FullName);
return _builder.ToString();
}
}
3.MainWindow.xaml.csに以下を記載する
┗「ObservableCollection」型の変数「PcAndFolders」を定義しインスタンス化する
┗ 変数「PcAndFolders」 のゲッターを定義する
┗ゲッター内で、設定ファイルを読み込む
┗ゲッター内で、変数 「PcAndFolders」 へクラス「PcAndFolder」のインスタンスを
設定(Add)する。インスタンス化する際に、「1.」で定義したメンバ「PcAndFolderName」
へ設定ファイルの内容を設定する
┗MainWindowメソッド内で、DataContextへ当該ゲッタ ー の返り値(変数「PcAndFolders」)
を設定する
●MainWindow.xaml.cs
using System.Collections.ObjectModel;
using System.IO;
public partial class MainWindow : Window
{
//「ObservableCollection」型の変数「PcAndFolders」を定義しインスタンス化する
ObservableCollection<PcAndFolder> PcAndFolders = new ObservableCollection<PcAndFolder>();
public MainWindow()
{
InitializeComponent();
//DataContextへ当該ゲッターの返り値( バインドさせるメンバ )を設定する
DataContext = this.GetPcAndFolders();
}
//変数「PcAndFolders」のゲッターを定義
public ObservableCollection<PcAndFolder> GetPcAndFolders()
{
//設定ファイルを読み込む
var ini = new IniFile("Sample.ini");
string line = ini.Read("Conf", "PcAndFolderName");
string[] PcAndFolderNames = line.Split(',');
//変数「PcAndFolders」へクラス「PcAndFolder」のインスタンスを設定(Add)する
//メンバ「PcAndFolderName」に設定ファイルの内容を設定する
foreach (var PcAndFolderName in PcAndFolderNames)
{
PcAndFolders.Add(new PcAndFolder() { PcAndFolderName = PcAndFolderName });
}
return PcAndFolders;
}
}
4.MainWindow.xamlにListBoxコントロールを作成し、値(バインドさせるメンバ)を記載する
※「1.」で定義したメンバ「PcAndFolderName」
●MainWindow.xaml
(省略)
<Grid>
<ListBox Name="PcAndFolderListBox" ItemsSource="{Binding}" Margin="40,40,0,0" Height="160" VerticalAlignment="Top" HorizontalAlignment="Left" Width="350" Grid.ColumnSpan="2">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="2">
<CheckBox IsChecked="true" Content="{Binding PcAndFolderName}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
(省略)