お世話になっております。
現在、ListBox内のアイテムをUp, Downボタン操作で並べ替える実装を行っております。
How to move item in listBox up and down?(StackOverflow)を参考にViewのコードビハインドに記述する方式では実装できました。
行いたいこと
View側に書くのではなく、ビヘイビアとして実装したいと思っております。
ビヘイビアという手法を最近知り、実装経験はありません。
ビヘイビアに関して調べたのですが、
Behavior<Button>
などを継承しているものと、していないもの。
Interactivity
を参照追加しているものや、していないもの。
「アクション」、「添付ビヘイビア」、「コマンド」、「Blend」、などの単語がでてきて、よくわからない状況です。
質問
下記の実装(現状コード)をビヘイビア化するのにはどうすればよいでしょうか。
すべてのボタンに対して同じ操作をするのであれば、Web上の記事を参考にして実装はできそうではありますが、
Move upボタンが押されたときはMoveItem(-1, lbTask);
、Move downボタンが押されたときはMoveItem(1, lbTask);
のようにボタンで判断して、適切な処理を行う場合のやり方が分かりません。
よろしくお願いいします。
環境
C#, WPF, .NET 4.6.2, VS2017Pro, Win10
現状コード How to move item in listBox up and down?(StackOverflow)からほぼコピペです
コードビハインド
c#
1 private void UpButton_Click(object sender, RoutedEventArgs e) 2 { 3 MoveItem(-1, lbTask); 4 } 5 6 private void DownButton_Click(object sender, RoutedEventArgs e) 7 { 8 MoveItem(1, lbTask); 9 } 10 11 public void MoveItem(int direction, ListBox lb) 12 { 13 // Checking selected item 14 if (lb.SelectedItem == null || lb.SelectedIndex < 0) 15 return; // No selected item - nothing to do 16 17 // Calculate new index using move direction 18 int newIndex = lb.SelectedIndex + direction; 19 20 // Checking bounds of the range 21 if (newIndex < 0 || newIndex >= lb.Items.Count) 22 return; // Index out of range - nothing to do 23 24 object selected = lb.SelectedItem; 25 26 // Removing removable element 27 lb.Items.Remove(selected); 28 // Insert it in new position 29 lb.Items.Insert(newIndex, selected); 30 // Restore selection 31 lb.SelectedIndex = newIndex; 32 }
XAML
1<Button Content="Move up" Margin="5,20,5,5" Click="UpButton_Click"/> 2<Button Content="Move down" Margin="5" Click="DownButton_Click"/> 3<ListBox Grid.Row="0" Grid.Column="1" x:Name="lbTask"> 4 <ListBoxItem Content="Item1"/> 5 <ListBoxItem Content="Item2"/> 6 <ListBoxItem Content="Item3"/> 7 <ListBoxItem Content="Item4"/> 8 <ListBoxItem Content="Item5"/> 9</ListBox>

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。