WPF MVVM Light无法触发DataGrid AutogeneratingColumn事件以动态管理列

时间:2016-05-11 09:02:43

标签: wpf datagrid listbox mvvm-light autogeneratecolumn

我想动态管理Datagrid的列,这些列是与EF元素相关的,并且只应显示从ListBox中选择的列。

我使用MVVM Light工具包,当我尝试使用并触发AutoGeneratingColumns事件时,它不起作用。它永远不会触发,即使在第一代DataGrid

这是我的viewmodel代码:

 private void dgArticles_ColumnGeneration(DataGridAutoGeneratingColumnEventArgs args)
        {
            string headername = args.Column.Header.ToString();

            foreach (Champ c in LstSelected)
            {
                if (headername != c.Libelle)
                {
                    args.Cancel = true;
                }
                args.Column.Header = c.Libelle;
            }
        }

这是我对DataGrid

的xaml代码的看法
 <DataGrid Name="dgArticles"
              IsEnabled="True"
              Grid.Column="2"
              Grid.Row="1"
              AutoGenerateColumns="True"
              ItemsSource="{Binding LstArticles}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="AutoGeneratingColumn">
                <Command:EventToCommand Command="{Binding GenerateColumns}" PassEventArgsToCommand="True"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </DataGrid>

出于最终目的,当用户修改了他在Button中选择的字段时,我想使用DataGrid来触发此事件来刷新ListBox

感谢您的帮助!

编辑:当然,我在我的VM的构造函数中声明了我的命令:

 public ExportViewModel()
        {
            GenerateColumns = new RelayCommand<DataGridAutoGeneratingColumnEventArgs>(dgArticles_ColumnGeneration);
            LstSelected = new ObservableCollection<Champ>();
            LstArticles = exp.ListerArticles();
        }

1 个答案:

答案 0 :(得分:1)

我自己解决了这个问题,这是&#34; columnS&#34;的语法错误。应该是我的xaml中的列...

正确触发事件。