2012-06-05 8 views
5

cómo agregar un botón Eliminar para cada fila en una cuadrícula de datos (contiene dos campos) en WPF. mientras ItemSource cuadrícula de datos esAgregar botón Eliminar para cada fila en la cuadrícula de datos

ObservableCollection<Result> 

y

public class Result : INotifyPropertyChanged 
{ 
    public string FriendlyName { get; set; } 
    public string Id { get; set; } 

    public Result(string name, string id) 
    { 
     this.FriendlyName = name; 
     this.Id = id; 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    void OnPropertyChanged(string property) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    } 

    #endregion 
} 

}

Respuesta

21

Puede agregar un DataGridTemplateColumn y añadir un Button a su CellTemplate. A continuación, utilice el construido en ApplicationCommands.Delete o en su propio ICommand para la Button

<DataGrid ItemsSource="{Binding Results}" 
      AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="FriendlyName" 
          Binding="{Binding FriendlyName}"/> 
     <DataGridTextColumn Header="Id" 
          Binding="{Binding Id}"/> 
     <DataGridTemplateColumn Header="Delete"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Button Content="Delete" 
          Command="Delete"/> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

actualización
Si no desea utilizar el construido en Delete puede utilizar su propia ICommand. Aquí hay un pequeño ejemplo con RelayCommand que se puede encontrar en el siguiente enlace: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx. Además, he subido aquí: RelayCommand.cs

<DataGrid ItemsSource="{Binding Results}" 
      SelectedItem="{Binding SelectedResult}" 
      AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <!-- ... --> 
     <DataGridTemplateColumn Header="Delete"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Button Content="Delete" 
          Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, 
               Path=DataContext.DeleteCommand}" 
          CommandParameter="{Binding}"/> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

Y en su modelo de vista o código detrás

private Result m_selectedResult; 
public Result SelectedResult 
{ 
    get { return m_selectedResult;} 
    set 
    { 
     m_selectedResult = value;     
     OnPropertyChanged("SelectedResult"); 
    } 
} 

private bool CanDelete 
{ 
    get { return SelectedResult != null; } 
} 

private ICommand m_deleteCommand; 
public ICommand DeleteCommand 
{ 
    get 
    { 
     if (m_deleteCommand == null) 
     { 
      m_deleteCommand = new RelayCommand(param => Delete((Result)param), param => CanDelete); 
     } 
     return m_deleteCommand; 
    } 
} 

private void Delete(Result result) 
{ 
    Results.Remove(result); 
} 
+1

gracias por la actualización mediante la adición del 'ICommand' manera de eliminar. – zulucoda

+0

@Fredrik Hedblad, y cómo eliminar elementos de la base de datos .mdf con este botón 'Content =" Delete " Command =" Delete "' –

Cuestiones relacionadas