VeriGrid'imin 3. sütununu (MVVM-WPF kullanarak) devre dışı bırakmak istiyorum ancak tıklatıldığında yeniden düzenlemek için etkinleştirmek istiyorum Grid'in dışında düğme. Bunu başarabilir miyim? Burada karşılaştığım Mücadelesi DataGrid'in buton tıklatmayla ilgili özelliğini nasıl alacağım, burada komut desenini kullanıyorum. Bu, benim ViewModel'imin nasıl göründüğüne baktığımda, belirli bir sütun düzenlenebilir hale getirmek için bu yöntemde yazmam gereken şey:VeriGrid'in belirli bir sütununu etkinleştirmek istiyorum düğmesini tıklatın
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;
}
}
Bu benim Customcommand böyle görünüyor:
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);
}
}
benim Görünüm: salt okunur nitelikler etrafında
<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>
yana ızgaram yalnızca görüntüleme yüklendiğinde okunur. Düzenlemek istiyorum düzenleme düğmesine basmak codebehind (Görünümün arkasındaki kodu) sayfasında yapmak yerine komut desenini kullanarak tıklayın. – Chanchal