回答編集履歴
1
Indexプロパティを使用した方法を追記
answer
CHANGED
@@ -78,4 +78,65 @@
|
|
78
78
|
</DataTemplate>
|
79
79
|
</ListBox.ItemTemplate>
|
80
80
|
</ListBox>
|
81
|
+
```
|
82
|
+
|
83
|
+
----
|
84
|
+
**(追記)**
|
85
|
+
データにIndexプロパティを持たせられるのであれば、ValueConverterも使用しない素直な実装になります。
|
86
|
+
以下の例では項目変更時に全ての`Index`を更新するようにしていますが、項目を入れ替える時にその項目の`Index`も入れ替える、という方法もあります。
|
87
|
+
|
88
|
+
```C#
|
89
|
+
public partial class MainWindow : Window
|
90
|
+
{
|
91
|
+
public ObservableCollection<MyItem> Collection { get; } = new ObservableCollection<MyItem>()
|
92
|
+
{
|
93
|
+
new MyItem{ ItemName="item1" },
|
94
|
+
new MyItem{ ItemName="item2" },
|
95
|
+
new MyItem{ ItemName="item3" },
|
96
|
+
new MyItem{ ItemName="item4" },
|
97
|
+
new MyItem{ ItemName="item5" }
|
98
|
+
};
|
99
|
+
|
100
|
+
public MainWindow()
|
101
|
+
{
|
102
|
+
InitializeComponent();
|
103
|
+
this.DataContext = this;
|
104
|
+
|
105
|
+
RefleshCollectionIndex();
|
106
|
+
this.Collection.CollectionChanged += (s, e) => RefleshCollectionIndex();
|
107
|
+
}
|
108
|
+
|
109
|
+
public void RefleshCollectionIndex()
|
110
|
+
{
|
111
|
+
for (int i = 0; i < this.Collection.Count; ++i)
|
112
|
+
{
|
113
|
+
this.Collection[i].Index = i;
|
114
|
+
}
|
115
|
+
}
|
116
|
+
}
|
117
|
+
|
118
|
+
//
|
119
|
+
public class MyItem : INotifyPropertyChanged
|
120
|
+
{
|
121
|
+
public event PropertyChangedEventHandler PropertyChanged;
|
122
|
+
protected void RaisePropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string name = null)
|
123
|
+
{
|
124
|
+
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
|
125
|
+
}
|
126
|
+
|
127
|
+
private int _index;
|
128
|
+
public int Index
|
129
|
+
{
|
130
|
+
get { return _index; }
|
131
|
+
set { if (_index != value) { _index = value; RaisePropertyChanged(); } }
|
132
|
+
}
|
133
|
+
|
134
|
+
private string _itemName;
|
135
|
+
public string ItemName
|
136
|
+
{
|
137
|
+
get { return _itemName; }
|
138
|
+
set { if (_itemName != value) { _itemName = value; RaisePropertyChanged(); } }
|
139
|
+
}
|
140
|
+
}
|
141
|
+
|
81
142
|
```
|