Binden Sie eine Funktion an ein Kontrollkästchen in einer Datagridview im Viewmodel

Binden Sie eine Funktion an ein Kontrollkästchen in einer Datagridview im Viewmodel

Die Lösung für das Binden einer Funktion an ein Kontrollkästchen in einer Datagridansicht im Ansichtsmodell
ist unten angegeben:

Schönen Tag. Ich habe einige Probleme, eine Funktion an ein Kontrollkästchen in einer Datagridview zu binden. Ich verwende Windows Form und das mvvm-Modell. Ich habe Daten in einer Datagridview und eine Reihe von Kontrollkästchen. Wenn ein Kontrollkästchen aktiviert ist, möchte ich, dass das Ansichtsmodell eine Funktion mit einer if-Anweisung ausführt.

So sieht meine Benutzeroberfläche gerade aus:

Zum Beispiel:Wenn ich das erste Kontrollkästchen aktiviere und auf die Schaltfläche „Softwarequalitätsbericht erstellen“ drücke, möchte ich, dass das Programm eine Funktion im Ansichtsmodell ausführt. Ich habe versucht, Zugriff auf die Datagridview im Ansichtsmodell zu erhalten, aber mit mvvm sollten Sie nicht über das Ansichtsmodell auf die Ansicht zugreifen. Wie kannst du das tun? Ist es möglich, etwas wie:(if datagridview1.checkbox1 ==true) {…} im Ansichtsmodell zu haben?

Ich hoffe, dass mir jemand eine allgemeine Richtung geben kann.

Danke im Voraus 🙂

Ich möchte eine Funktion innerhalb dieser Funktion verwenden (eine Funktion in meinem Ansichtsmodell):

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);
        }

    }

und hier ist mein Modell:

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);
        }
    }
}

Ich hoffe, das hilft

Ich werde ein Beispiel eingeben. Gleichen Sie Ihren Code damit ab. So verwenden Sie den checkbox in DataGrid und binde es an viewmodel

Ihr Modell

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));
   }
}

jetzt ViewModel

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},
      };
   }
}

jetzt in MainWindow.cs

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

jetzt 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>