我想动态管理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
:
<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();
}
答案 0 :(得分:1)
我自己解决了这个问题,这是&#34; columnS&#34;的语法错误。应该是我的xaml中的列...
正确触发事件。