[英]WPF DataGrid ContextMenu data transfer
大家好! 我是WPF和.NET的新手,並試圖在其中進行認真的應用。 在某種程度上,我無法弄清楚該怎么做,我有一個包含帶有某些選項卡的TabControl
Grid
,在每個選項卡上,我都有一個DataGrid
和MySQL的數據。 這部分並不是那么困難,但是現在我需要做一些過濾器,通過用戶選擇啟用/禁用某些列。 為此,我使用ContextMenu
在帶有列名列表的單擊新窗口的調用上。 在每個選項卡上。 所以我做了通用的Filter_Window
。 我想出了如何獲取此名稱,但無法獲取需要Filter_Window
的DataGrid
。 我嘗試了VisualTreeHelper
,但是ContextMenu
擁有它自己的VisualTree,卻沒有給我任何東西。 DataContext
沒有提供任何幫助。
只是不想單獨為每個選項卡單擊,這是不對的,但這是最明顯的解決方案。 只需要將DataGrid
傳輸到Filter_Window
的方法即可。
如果我說的不好,對不起我的語言。 如果代碼示例需要澄清我寫的內容,請說出來,然后我將發布一些內容。
創建一個具有DataGrid
所有列的boolean
屬性的類,然后在新窗口中選擇它們。 例如:
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;
確實找到了更適合我的答案,但忘了在這里發布。 用Command和CommandParameter完成。 我在MainWindow中的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>
並將新的Command添加到項目中:
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,僅在運行程序時應用更改,還沒有保存可見性...太懶了,現在才返回程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.