美好的一天給大家!我是新來的WPF和.NET,並試圖在其中認真應用。在第一部分,我找不出如何讓正確的,我有Grid
包含TabControl
一些標籤,每個標籤上我有DataGrid
與MySQL的數據。這部分不是那麼難,但現在我需要做一些過濾,通過用戶選擇啓用/禁用某些列。爲此,我使用ContextMenu
,在調用時單擊帶有列名稱列表的新窗口。在每個標籤上。所以我做了普遍的Filter_Window
。我想如何得到這個名字,但不能得到DataGrid
,那要求Filter_Window
。我試過VisualTreeHelper
,但ContextMenu
有它自己的VisualTree,它沒有給我任何東西。 DataContext
沒有給出任何意見。
只是不想單獨爲每個標籤點擊,這是不正確的,但它是最明顯的解決方案。只需要將DataGrid
轉換爲Filter_Window
。
對不起,我的語言不好,如果代碼示例需要澄清我寫的內容 - 說,我會張貼一些。WPF DataGrid ContextMenu數據傳輸
0
A
回答
0
沒有找到更適合我回答,卻忘了在這裏發佈。用Command和CommandParameter完成。我在XAML的確在主窗口什麼:
<DataGrid.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
<MenuItem x:Name ="AktFilter" Header="_Фильтры..." Command="{StaticResource ResourceKey=FilterCommand}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget}"/>
</ContextMenu>
</DataGrid.ContextMenu>
,並增加了新的命令到項目:
class FilterCommand : ICommand
{
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged
public void Execute(object parameter)
{
if (parameter != null)
{
FilterWindow newW = new FilterWindow();
newW.Owner = Application.Current.MainWindow;
newW._sender = parameter as DataGrid;
newW.ShowDialog();//можно через условие нажатия на ок попробовать запилить обработку сохранения или !!!!! смену состояния строк
if (newW.DialogResult == true)
{
DataGrid dg = parameter as DataGrid;
Filters filterList = (Filters)newW.FilterDG.ItemsSource;
for (int i = 0; i < dg.Columns.Count; i++)
{
if (filterList[i].Visible)
{
dg.Columns[i].Visibility = Visibility.Visible;
}
else
{
dg.Columns[i].Visibility = Visibility.Collapsed;
}
//тут еще засунуть фильтры!!!
}
}
}
}
}
此代碼生成的列名和複選框的DataGrid,運行程序時只適用修改後,保存的能見度尚未完成... 太懶惰,現在只能回到程序。
0
創建一個boolean
您的DataGrid
所有列的屬性,並在新窗口中選擇它們。例如:
public class ColumnChooser
{
public bool IsShowIdStudent { get; set; }
public bool IsShowFirstName { get; set; }
public bool IsShowLastName { get; set; }
public bool IsShowGroup { get; set; }
public bool IsShowUniversity { get; set; }
}
之後,你可以設置基於其上存儲喜歡你的布爾值類爲您列Visibility
:
YourDataGrid.Columns[IndexOftheColumn].Visibility = Visibility.Collapsed;
相關問題
- 1. ContextMenu不綁定數據網格WPF
- 2. WPF - CanExecute不適用於DataGrid的ContextMenu
- 3. WPF DataGrid失去了對ContextMenu的關注
- 4. DataGrid的ContextMenu
- 5. 從Datagrid到DataTable的傳輸數據
- 6. WPF 4.0 Databinding DataMrid上的ContextMenu
- 7. DataGrid行Caliburn.Micro和ContextMenu行
- 8. WPF datagrid更新數據庫
- 9. WPF datagrid綁定數據表
- 10. WPF datagrid數據刷新
- 11. WPF的Datagrid刷新數據
- 12. WPF DataGrid RowHeader數據綁定
- 13. WPF輸入數據網格?
- 14. 如何在WPF數據網格中添加每列ContextMenu
- 15. WPF treeview contextmenu命令參數
- 16. wpf ContextMenu樣式
- 17. WPF contextmenu綁定
- 18. wpf - 命令,contextmenu
- 19. wpf binding contextmenu
- 20. WPF中的ContextMenu
- 21. WPF contextmenu和ListView
- 22. WPF MVVM Dynamic ContextMenu
- 23. 從二維數組將數據傳遞到DataGrid WPF C#
- 24. Datepicker輸出格式Datagrid wpf
- 25. 在wpf表單之間傳輸數據
- 26. 如何在WPF工具包中設置綁定Datagrid的ContextMenu CommandParameter
- 27. WPF:以編程方式將ContextMenu添加到DataGrid列標題
- 28. WPF DataGrid刪除列
- 29. DataGrid與空數據表,以允許用戶輸入C#WPF
- 30. ContextMenu裏面的WPF中的ContextMenu
有10個DataGrid使用此過濾器,並且它們具有不同的一組列名稱。我只是不想複製這些類和其他東西。我想我已經找到了用CommandParameter傳遞DataGrid的方法,但現在它不能正常工作。 –