WPF datagrid contextmenu menuitem commandparameter CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu},Path=PlacementTarget}"

Install-package newtonsoft.json

 

 

 <DataGrid.ContextMenu>
     <ContextMenu>
         <MenuItem Header="Export Selected" Command="{Binding ExportSelectedCmd}"
    CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
             AncestorType=ContextMenu},Path=PlacementTarget}"/>
         <MenuItem Header="Export All" Command="{Binding ExportAllCmd}"
    CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
             AncestorType=ContextMenu},Path=PlacementTarget}"/>
     </ContextMenu>
 </DataGrid.ContextMenu>           
 <DataGrid.Columns>



//viewmodel
public DelCmd ExportSelectedCmd { get; set; }
public DelCmd ExportAllCmd { get; set; }

private void InitCmds()
{
    ExportSelectedCmd = new DelCmd(ExportSelectedCmdExecuted);
    ExportAllCmd = new DelCmd(ExportAllCmdExecuted);
}

private void ExportAllCmdExecuted(object obj)
{
    var dg = obj as DataGrid;
    if(dg!=null)
    {
        var items = dg.ItemsSource.Cast<Book>()?.ToList();
        if(items!=null && items.Any())
        {
            string jsonStr=JsonConvert.SerializeObject(items,formatting: Formatting.Indented);
            string allJsonFile = $"All{DateTime.Now.ToString("yyyyMMddHHmmssffff")}_{Guid.NewGuid().ToString()}.json";
            File.AppendAllText(allJsonFile, jsonStr);
            MessageBox.Show($"Exported at:\n{allJsonFile}", "Export successfully!", MessageBoxButton.OK);
        }
    }
}

private void ExportSelectedCmdExecuted(object obj)
{
    var dg = obj as DataGrid;
    if (dg != null)
    {
        var items = dg.SelectedItems.Cast<Book>()?.ToList();
        if (items != null && items.Any())
        {
            string jsonStr = JsonConvert.SerializeObject(items, formatting: Formatting.Indented);
            string selectedFile = $"Selected{DateTime.Now.ToString("yyyyMMddHHmmssffff")}_{Guid.NewGuid().ToString()}.json";
            File.AppendAllText(selectedFile, jsonStr);
            MessageBox.Show($"Exported at:\n{selectedFile}", "Export successfully!", MessageBoxButton.OK);
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2024-09-14 11:13  FredGrit  阅读(2)  评论(0编辑  收藏  举报