2016-04-04 19 views
-1

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> 
+0

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

cevap

0

Takas her hücrede. Öyleyse butona Bu

dataGridView1.Rows[row.index].ReadOnly= false; 
dataGridView1.Columns[columns.index].ReadOnly= false; 

veya tüm ızgara gibi tüm satır veya sütunu ayarlayabilirsiniz

dataGridView1.Rows[row.index].Cells[column.index].ReadOnly= false; 

tıklayın Bu

dataGridView1.Rows[row.index].Cells[column.index].ReadOnly= true; 

gibi başlamak

dataGridView1.ReadOnly = false; 
+0

@ Chanchal, – JSON

+0

'u sorduğunuzdan emin değilim. Sorun şu: Bir veriye sahip bir sütun var ve kullanıcı, ızgaranın altındaki Düzenle düğmesini tıkladıktan sonra düzenlenebilir. Gereksinim, Düzenle düğmesine tıklanana kadar ızgaradaki hücreleri düzenlenemez halde tutmaktır. Satırlar arasında gezinmek için Kaydırma çubuğunun etkinleştirilmesi gerektiğinden, tüm ızgara devre dışı bırakılamaz. – Chanchal

+0

@ Chanchal Izgarayı ReadOnly olarak ayarlamanızı öneririm. Bu, Etkin'den farklıdır. ReadOnly şeyleri etkin tutar, ancak kullanıcının metni düzenlemesini engeller. Kaydırma çubukları hala çalışır. – JSON

İlgili konular