要件と実装ポイント
リストデータの操作機能を実装する場合、以下の要件を満たす必要があります:
- テキスト入力フィールドからデータを追加
- 選択項目の内容を更新
- 選択項目の削除
主要な実装要素
- DisplayMemberPathによるプロパティ表示指定
- ObservableCollectionによる自動更新通知
- INotifyPropertyChangedインターフェースの実装
- ItemsSourceプロパティによるデータバインディング
XAML実装例
<Window x:Class="ListOperations.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="リスト操作" Height="350" Width="500">
<StackPanel Margin="10">
<TextBox Name="inputField" Margin="0,0,0,10"/>
<StackPanel Orientation="Horizontal">
<Button Name="addButton" Content="追加" Click="AddItem" Margin="0,0,5,0"/>
<Button Name="updateButton" Content="更新" Click="UpdateItem" Margin="5,0,5,0"/>
<Button Name="deleteButton" Content="削除" Click="RemoveItem"/>
</StackPanel>
<ListBox Name="itemList" DisplayMemberPath="DisplayValue" Height="150" Margin="0,10,0,0"/>
</StackPanel>
</Window>
C#実装例
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows;
namespace ListOperations
{
public partial class MainView : Window
{
private ObservableCollection<ListItem> items = new ObservableCollection<ListItem>();
public MainView()
{
InitializeComponent();
InitializeData();
}
private void InitializeData()
{
items.Add(new ListItem { DisplayValue = "項目1" });
items.Add(new ListItem { DisplayValue = "項目2" });
items.Add(new ListItem { DisplayValue = "項目3" });
itemList.ItemsSource = items;
}
private void AddItem(object sender, RoutedEventArgs e)
{
if (!string.IsNullOrEmpty(inputField.Text))
{
items.Add(new ListItem { DisplayValue = inputField.Text });
}
}
private void UpdateItem(object sender, RoutedEventArgs e)
{
if (itemList.SelectedItem != null)
{
(itemList.SelectedItem as ListItem).DisplayValue = inputField.Text;
}
}
private void RemoveItem(object sender, RoutedEventArgs e)
{
if (itemList.SelectedItem != null)
{
items.Remove(itemList.SelectedItem as ListItem);
}
}
}
public class ListItem : INotifyPropertyChanged
{
private string displayContent;
public string DisplayValue
{
get => displayContent;
set
{
displayContent = value;
OnPropertyChanged(nameof(DisplayValue));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
動作説明
この実装では以下の動作特性があります:
- ObservableCollectionを使用することで、項目追加/削除時にUIが自動更新
- INotifyPropertyChangedにより項目値変更時に表示が即時反映
- DisplayMemberPathで表示プロパティを直接指定