Vincule una función a una casilla de verificación en una vista de cuadrícula de datos en el modelo de vista

Vincule una función a una casilla de verificación en una vista de cuadrícula de datos en el modelo de vista

La solución para vincular una función a una casilla de verificación en una vista de cuadrícula de datos en el modelo de vista
se proporciona a continuación:

Buenos días. Tengo algunos problemas para vincular una función a una casilla de verificación dentro de una vista de cuadrícula de datos. Estoy usando el formulario de Windows y el modelo mvvm. Tengo datos en una vista de cuadrícula de datos y una fila de casillas de verificación. Si se marca una casilla de verificación, quiero que el modelo de vista ejecute una función con una declaración if.

Así es como se ve mi interfaz de usuario en este momento:

Por ejemplo:si marco la primera casilla de verificación y presiono el botón "Crear informe de calidad del software", quiero que el programa ejecute una función en el modelo de vista. Intenté obtener acceso a la vista de cuadrícula de datos en el modelo de vista, pero con mvvm no debería acceder a la vista desde el modelo de vista. ¿Cómo puedes hacer esto? ¿Es posible tener algo como:(if datagridview1.checkbox1 ==true) {…} en el modelo de vista?

Espero que alguien pueda darme una dirección general.

Gracias de antemano 🙂

Quiero usar una función dentro de esta función (una función en mi modelo de vista):

private void ExecuteCreateSofwareQualityReportButtonClick()
    {
        

        OpenFileDialog OpenExcel = new OpenFileDialog()
        {
            Title = "Save Excel File",
            CheckPathExists = true,
            DefaultExt = "txt",
            Filter = "Excel files (*.xls)|*.xls",
            FilterIndex = 1,
            RestoreDirectory = true
        };

        if (OpenExcel.ShowDialog() == DialogResult.OK)
        {
            Microsoft.Office.Interop.Excel.Application xlApp;
            Microsoft.Office.Interop.Excel.Workbook xlWorkBook;

            xlApp = new Microsoft.Office.Interop.Excel.Application();
            xlWorkBook = xlApp.Workbooks.Open(OpenExcel.FileName);


            //Excel application is stopped and the process is killed
            CloseExcelProcess(xlWorkBook, xlApp);
        }

    }

y aquí está mi modelo:

public class ApplicationModel : BindableBase
{
    private Project _selectedProject;

    private Tracker _selectedTracker;

    private string _selectedSoftwareElement;

    public BindingList<Project> ProjectList { get; set; } = new BindingList<Project>();

    public BindingList<Tracker> TrackerList { get; set; } = new BindingList<Tracker>();

    public BindingList<Item> ItemList { get; set; } = new BindingList<Item>();

    public BindingList<string> SoftwareElements = new BindingList<string>();


    public Project SelectedProject
    {
        get 
        { 
            return _selectedProject; 
        }
        set 
        { 
            SetProperty(ref _selectedProject, value);  
        }
    }

    public Tracker SelectedTracker
    {
        get 
        { 
            return _selectedTracker; 
        }
        set
        {
            SetProperty(ref _selectedTracker, value);
        }
    }

    public string SelectedSoftwareElement
    {
        get
        {
            return _selectedSoftwareElement;
        }
        set
        {
            SetProperty(ref _selectedSoftwareElement, value);
        }
    }
}

Espero que esto ayude

Voy a introducir un ejemplo. Haz coincidir tu código con él. Cómo usar el checkbox en DataGrid y vincularlo al viewmodel

tu modelo

pulic class Model : INotifyPropertyChanged
{
   public int ID { get; set; }
   public string Name { get; set; }
   private bool isCheckBox;

   public bool IsCheckBox
   {
      get { return isCheckBox; }
      set
      {
          isCheckBox = value;
          OnPropertyChange(nameof(IsCheckBox));
      }
   }
   public event PropertyChangedEventHandler PropertyChanged;

   protected void OnPropertyChange(string propertyName)
   {
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
   }
}

ahora Modelo de vista

public class MainViewModel
{
   public List<Model> myList { get; set; }
   public MainViewModel()
   {
      myList = new List<Model>()
      {
         new Model(){ ID = 1, Name = "name 1" IsCheckBox = true},
         new Model(){ ID = 2, Name = "name 2" IsCheckBox = false},
      };
   }
}

ahora en MainWindow.cs

public MainWindow()
{
   this.DataContext = new MainViewModel();
}

ahora MainWindow.xaml

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding myList}">
        <DataGrid.Columns>
           <DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
           <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
           <DataGridCheckBoxColumn  Header="Checkbox Column" Binding="{Binding IsCheckBox, Mode=TwoWay}"/> 
        </DataGrid.Columns>
</DataGrid>