La vista es responsable de esto. Simplemente puede usar codebehind para controlar la visibilidad de los elementos de la interfaz de usuario en respuesta a las acciones del usuario en la interfaz de usuario.
A veces, es mejor ser práctico que ser rígidamente dogmático.
Bueno, ahora que ha editado su pregunta, se convierte en una cuestión completamente diferente.
Su DataGrid debe estar vinculada a una colección de elementos.
Su botón debe estar vinculado a un comando en ViewModel, y CommandParameter debe ser el modelo al que está asociada la fila en particular.
<DataTemplate>
<Button Content="Remove"
Command="{Binding DataContext.RemoveItemCommand,
ElementName=theWindow}"
CommandParameter="{Binding}" />
</DataTemplate>
Tenga en cuenta algunas cosas importantes aquí. Necesitamos, desde dentro de la plantilla, vincular a un ICommand en ViewModel. ViewModel es DataContext de la ventana. En este ejemplo, la ventana se llama 'theWindow' (x:Name="theWindow"
). Como la fuente del Encuadernación es la ventana, la ruta de acceso debe apuntar al ViewModel en la propiedad DataContext en esa ventana.
Pasamos el modelo actual al que la fila DataGrid está vinculada en el comando. De esta forma, es triival eliminarlo de la colección en ViewModel.
public ObservableCollection<Model> Items {get;set;}
public ICommand RemoveItemCommand {get;set;}
// this method is called when RemoveItemCommand.Execute is called!
public void Execute(object parameter)
{
Items.Remove(parameter as Model);
}
Esto supone que está utilizando una de las implementaciones estándar de ICommand delegadas que existen. Puede ver cómo esto es trivial de implementar, y dado que la colección es observable, una vez que haga clic en el botón y se elimine el Modelo, se le notificará al DataGrid el cambio en la colección y se eliminará esa fila.
Hacer los elementos responsables de eliminarse es mucho más simple (y más fácilmente comprobable) que el enfoque de Will de vincular un comando en el elemento primario de los elementos. –
Este enfoque fue más simple de implementar y funciona bien. Gracias –