0

WPFデータグリッドを使用しています。現在選択されている行の前後に新しい行を挿入する必要があります。どうやってやるの?

まっすぐな方法はありますか?

4

1 に答える 1

1

ObservableCollectionSelectedItem プロパティを持つ の ようなもの、次のようなものにバインドされたグリッドがあると仮定しています<DataGrid ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}">

したがって、ビュー モデルまたはコード ビハインドでは、次のことができます。

int currentItemPosition = Items.IndexOf(SelectedItem) + 1;
if (currentItemPosition == 1)
    Items.Insert(0, new Item { Name = "New Item Before" });
else
    Items.Insert(currentItemPosition - 1, new Item { Name = "New Item Before" });

Items.Insert(currentItemPosition + 1, new Item { Name = "New Item After" });

完全な例を次に示します。空の WPF プロジェクトを使用しました。コードビハインド:

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Items = new ObservableCollection<Item>
            {
                new Item {Name = "Item 1"},
                new Item {Name = "Item 2"},
                new Item {Name = "Item 3"}
            };

            DataContext = this;
        }

        public ObservableCollection<Item> Items { get; set; }

        public Item SelectedItem { get; set; }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            int currentItemPosition = Items.IndexOf(SelectedItem) + 1;
            if (currentItemPosition == 1)
                Items.Insert(0, new Item { Name = "New Item Before" });
            else
                Items.Insert(currentItemPosition - 1, new Item { Name = "New Item Before" });

            Items.Insert(currentItemPosition + 1, new Item { Name = "New Item After" });
        }
    }

    public class Item
    {
        public string Name { get; set; }
    }

XAML:

<Window x:Class="DataGridTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Button Grid.Row="0" Content="Add Rows" Click="Button_Click_1" />
        <DataGrid Grid.Row="1" ItemsSource="{Binding Items}"  SelectedItem="{Binding SelectedItem}" />
    </Grid>
</Window>
于 2013-01-25T09:28:34.620 に答える