【C#】WPFの画面上に、設定ファイルの内容を、チェックボックス付きリストボックス(checkedListBox)で表示する(バインドする)

PR

前提

バインド機能を使用して、設定ファイルに記載の「PC名及びフォルダ名」を、チェックボックス付きで画面に表示する

画面イメージ


設定ファイルの内容
┗カンマ区切りで 複数の「PC名及びフォルダ名」 を記載

PR

手順(例)

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>

(省略)
タイトルとURLをコピーしました