小编Dav*_*ave的帖子

MVVM - WPF DataGrid - AutoGeneratingColumn事件

我目前正在好好看看Laurent 的优秀工具包,我有以下问题.

从Blend 4中,我为Loaded事件添加了一个EventTrigger,在我的ViewModel中,我有以下内容:

public RelayCommand rcAutoGeneratingColumn { get; private set; }
Run Code Online (Sandbox Code Playgroud)

在构造函数中我有:

rcAutoGeneratingColumn = 
   new RelayCommand(o => DataGridAutoGeneratingColumn(o));
Run Code Online (Sandbox Code Playgroud)

同样在ViewModel中,我有我希望由RelayCommand调用的方法:

    private void DataGridAutoGeneratingColumn(Object o)
    {
        DataGrid grid = (DataGrid)o;

        foreach (DataGridTextColumn col in grid.Columns)
        {
            if (col.Header.ToString().ToLower() == "id")
            {
                col.Visibility = System.Windows.Visibility.Hidden;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的XAML包含以下内容(对于DataGrid):

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <GalaSoft_MvvmLight_Command:EventToCommand 
            Command="{Binding rcAutoGeneratingColumn, Mode=OneWay}"
            CommandParameter="{Binding ElementName=dataGrid1, Mode=OneWay}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)

这里没有问题代码工作正常,但显然用于隐藏某些列的事件应该是AutoGeneratingColumn事件而不是Loaded.我曾经习惯将Loaded事件作为一个问题.

我希望我可以转发控件提供的任何事件,这样,在这种情况下,以下代码将起作用:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="AutoGeneratingColumn">
        <GalaSoft_MvvmLight_Command:EventToCommand 
            Command="{Binding rcAutoGeneratingColumn, Mode=OneWay}"
            CommandParameter="{Binding ElementName=dataGrid1, Mode=OneWay}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)

我无法触发AutoGeneratingColumn事件,我希望我忽略了一些事情,并感谢任何给出的建议!

这种行为与DevExpress中的GridControl相同,因为Loaded事件被触发,而 …

wpf datagrid devexpress mvvm mvvm-light

2
推荐指数
1
解决办法
5602
查看次数

标签 统计

datagrid ×1

devexpress ×1

mvvm ×1

mvvm-light ×1

wpf ×1