2013-01-25 2 views
0

WPF DataGrid를 사용하고 있습니다. 현재 선택한 행 앞뒤에 새 행을 삽입해야합니다. 어떻게해야합니까?wpf 데이터 격자에서 현재 선택된 행 앞뒤에 새 행 삽입

직접적인 방법이 있습니까?

+0

당신이 다음 트릭을 할 것입니다 컬렉션을 질수 ObservableCollection에에 ItemSource를 바인딩하는 경우. 시도한 코드를 공유 할 수 있습니까? –

+0

데이터 그리드의 ControlTemplate으로 재생하려했지만 성공하지 못했습니다. –

답변

1

나는 <DataGrid ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}">과 같은 SelectedItem 속성과 함께 ObservableCollection과 같은 것으로 바운드되어 있다고 가정합니다.

그래서보기 모델 또는 코드 숨김이 작업을 수행 할 수 있습니다

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>