Я хочу отключить (закрыть для редактирования) третий столбец моей dataGrid (с использованием MVVM-WPF), но хочу, чтобы разрешить снова редактировать за пределами сетки. Как я могу это достичь? Задача, с которой я столкнулся, заключается в том, как получить свойство dataGrid при нажатии кнопки, я использую здесь шаблон команды. Вот как выглядит мой ViewModel сейчас, то, что я должен написать в этом методе, чтобы сделать редактирование определенного столбца:Я хочу, чтобы конкретный столбец моего DataGrid редактировался при нажатии кнопки
public class TicketOverViewViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private TicketDataService ticketDataService;
private ObservableCollection<Ticket> tickets;
public ObservableCollection<Ticket> Tickets
{
get
{
return tickets;
}
set
{
tickets = value;
RaisePropertyChanged("Tickets");
}
}
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public TicketOverViewViewModel()
{
ticketDataService = new TicketDataService();
LoadData();
LoadCommands();
}
private void LoadData()
{
tickets = ticketDataService.GetAllTickets().ToObservableCollection();
}
public ICommand EditCommand { get; set; }
private void LoadCommands()
{
EditCommand = new CustomCommand(EditTicket, CanEditTicket);
}
private void EditTicket(object obj)
{
//TODO
}
private bool CanEditTicket(object obj)
{
return true;
}
}
Это как мой Customcommand выглядит:
public class CustomCommand : ICommand
{
private Action<object> execute;
private Predicate<object> canExecute;
public CustomCommand(Action<object> execute, Predicate<object> canExecute)
{
this.execute = execute;
this.canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
bool b = canExecute == null ? true : canExecute(parameter);
return b;
}
public event EventHandler CanExecuteChanged
{
add
{
CommandManager.RequerySuggested += value;
}
remove
{
CommandManager.RequerySuggested -= value;
}
}
public void Execute(object parameter)
{
execute(parameter);
}
}
Мой Вид:
<Window x:Class="DataGridMVVM.View.TicketOverView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DataGridMVVM.View"
mc:Ignorable="d"
Title="Ticket Overview" Height="348.936" Width="421.277"
DataContext= "{Binding Source={StaticResource mainViewModelLocator}, Path=TicketOverViewViewModel }">
<Grid>
<DataGrid x:Name="dataGrid" HorizontalAlignment="Left" VerticalAlignment="Top"
AutoGenerateColumns="True" ItemsSource="{Binding Tickets}" IsReadOnly="True"
CanUserResizeColumns="True" Height="100" Width="400" />
<Button x:Name="button" Content="Edit" Command="{Binding EditCommand}"
HorizontalAlignment="Left" Margin="239,183,0,0" VerticalAlignment="Top" Width="75" />
</Grid>
</Window>
С моя сетка читается только при загрузке представления. Я хочу m ake его можно редактировать, нажав кнопку «Редактировать», используя шаблон команды, вместо того, чтобы делать это на странице codebehind (View's code behind). – Chanchal