За это отвечает View. Вы можете просто использовать codebehind для управления видимостью элементов пользовательского интерфейса в ответ на действия пользователя в пользовательском интерфейсе.
Иногда лучше быть практичным, чем жестко догматичным.
Ну, теперь, когда вы отредактировали свой вопрос, он становится совершенно другим вопросом.
Ваш DataGrid должен быть привязан к коллекции элементов.
Ваша кнопка должна быть привязана к команде в ViewModel, а CommandParameter должен быть моделью, с которой связана конкретная строка.
<DataTemplate>
<Button Content="Remove"
Command="{Binding DataContext.RemoveItemCommand,
ElementName=theWindow}"
CommandParameter="{Binding}" />
</DataTemplate>
Обратите внимание на некоторые важные вещи здесь. Нам нужно из шаблона связать ICommand в ViewModel. ViewModel - это DataContext окна. В этом примере окно называется «theWindow» (x:Name="theWindow"
). Поскольку источником Binding является окно, путь должен указывать на ViewModel в свойстве DataContext этого окна.
Мы передаем текущую модель, с которой связана строка DataGrid, в команду. Таким образом, тривиально удалить его из коллекции в 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);
}
Предполагается, что вы используете одну из стандартных делегированных реализаций ICommand. Вы можете увидеть, как это легко реализовать, и поскольку коллекция является наблюдаемой, после того, как вы нажмете кнопку и Модель будет удалена, DataGrid будет уведомлен об изменении в коллекции и удалит эту строку.