複数の DataGrid を生成する WPF プログラムがあります。このサイトのアイデアを使用して、各グリッドを Excel にエクスポートする機能を追加しました: http://www.codeproject.com/Articles/120480/Export-to-Excel-Functionality-in-WPF-DataGrid
現在、各グリッドの下に、次のような独自のハンドラーを持つボタンがあります。
private void m_btnExportTimePartitionToExcel_Click(object sender, RoutedEventArgs e)
{
try
{
ExportToExcel<SystemTimeRecordData, List<SystemTimeRecordData>> s = new ExportToExcel<SystemTimeRecordData, List<SystemTimeRecordData>>();
ICollectionView view = CollectionViewSource.GetDefaultView(m_gridPartitionSystemTimeRecords.ItemsSource);
s.dataToPrint = (List<SystemTimeRecordData>)view.SourceCollection;
s.GenerateReport();
}
catch (Exception ex)
{
MessageBox.Show("Problem with exporting Excel. Error: " + ex.Message);
}
}
各グリッドに同様のボタン ハンドラーがあります。これはすべて機能しますが、「においがします」。各ボタンが呼び出すハンドラーを 1 つだけ持つ方法があるはずです。つまり、そのボタンに関連付けられたグリッドと関連するクラスを渡すことができればということです。XAMLからそれを行うことはできますか? 引数を渡す例を検索して見ましたが、グリッド自体ではなく、確かにクラスではなく、タイプとして渡す必要があると思いますか? 上記のコードを次のようなものに置き換えるといいでしょう...
private void m_btnExportTimePartitionToExcel_Click(object sender, RoutedEventArgs e)
{
try
{
// some how get Type type, and grid from sender and/or e
ExportToExcel<type, List<type>> s = new ExportToExcel<type, List<type>>();
ICollectionView view = CollectionViewSource.GetDefaultView(m_grid.ItemsSource);
s.dataToPrint = (List<type>)view.SourceCollection;
s.GenerateReport();
}
catch (Exception ex)
{
MessageBox.Show("Problem with exporting Excel. Error: " + ex.Message);
}
}
そうすれば、ボタン ハンドラを 1 つだけ持つことができます。何か案は?ありがとう、デイブ