ビューモデルのデータグリッドビューのチェックボックスに関数をバインドします

ビューモデルの datagridview のチェックボックスに関数をバインドするためのソリューション
は以下のとおりです:

良い一日。関数を datagridview 内のチェックボックスにバインドする際に問題が発生しています。 Windows フォームと mvvm モデルを使用しています。 datagridview とチェックボックスの行にデータがあります。チェックボックスがチェックされている場合、viewmodel で if ステートメントを使用して関数を実行する必要があります。

現在の UI は次のとおりです。

例:最初のチェックボックスをオンにして [ソフトウェア品質レポートの作成] ボタンを押すと、ビューモデルで関数を実行するプログラムが必要になります。ビューモデルでデータグリッドビューにアクセスしようとしましたが、mvvm ではビューモデルからビューにアクセスするべきではありません。どうすればこれを行うことができますか?ビューモデルに (if datagridview1.checkbox1 ==true) {…} のようなものを含めることは可能ですか?

誰かが私に一般的な方向性を教えてくれることを願っています.

よろしくお願いします🙂

この関数内で関数を使用したい (viewmodel 内の関数):

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

    }

これが私のモデルです:

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

これがお役に立てば幸いです

例を入力します。あなたのコードをそれに合わせてください。 checkbox の使い方 DataGridviewmodel にバインドします

あなたのモデル

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

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

現在 MainWindow.cs にあります

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

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>