ListView の列ヘッダーの順序と幅を保存・復元するやり方です。
MEMO
WPF の ListView の話題です。Forms の ListView ではないので注意してください。
たとえばこんな xaml の場合。
<ListView>
<ListView.View>
<GridView>
<GridViewColumn Width="50">
<GridViewColumnHeader Content="有効" />
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsEnabled}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="250" DisplayMemberBinding="{Binding MailAddress}">
<GridViewColumnHeader Content="メールアドレス" />
</GridViewColumn>
<GridViewColumn Width="100">
<GridViewColumnHeader Content="メモ" />
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Memo}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
ダイアログのイメージはこんな感じ。(見やすくするために、xaml のほうからはタグをいろいろ省略してあります)
列順と列幅の取得(保存)のコード。
Dim oGridView As GridView = oListView.View
Dim oCols As GridViewColumnCollection = oGridView.Columns
For Each oCol As GridViewColumn In oCols
'各列の名前と幅を好きなように保存↓
'DirectCast(oCol.Header, GridViewColumnHeader).Content.ToString
'oCol.Width.ToString
Next
列順と列幅の復元のコード。
Dim oGridView As GridView = oListView.View
Dim oCols As GridViewColumnCollection = oGridView.Columns
Dim IndexAfter As Integer = 0
For Each ColInfoArray As String() In ColNameWidthList '← 保存しておいた列名・列幅のリストや配列
Dim ColName As String = ColInfoArray(0)
Dim ColWidth As Integer = ColInfoArray(1)
'このへん↑は好きなやり方で。
Dim bFound As Boolean = False
Dim IndexBefore As Integer = 0
For i As Integer = IndexAfter To oCols.Count -1
Dim oCol As GridViewColumn = oCols(i)
if DirectCast(oCol.Header, GridViewColumnHeader).Content.ToString().Equals(ColName) Then
bFound = True
IndexBefore = i
oCol.Width = ColWidth
Exit For
End If
Next
If bFound = True Then
oCols.Move(IndexBefore, IndexAfter)
IndexAfter += 1
End If
Next

