В настоящее время я хорошо разбираюсь в инструментах от Laurent, и у меня есть следующий вопрос.MVVM - WPF DataGrid - событие AutoGeneratingColumn
из смеси 4, я добавил EventTrigger для нагруженного события, на мой ViewModel У меня есть следующие:
public RelayCommand rcAutoGeneratingColumn { get; private set; }
В конструкторе у меня есть:
rcAutoGeneratingColumn =
new RelayCommand(o => DataGridAutoGeneratingColumn(o));
Также в 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;
}
}
}
В моем XAML содержится fo llowing (для 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>
Там нет никаких проблем здесь код работает просто отлично, но, очевидно, это событие используется для скрытия определенных столбцов должно быть AutoGeneratingColumn события и не грузятся. Я использовал событие Loaded как getaround.
Я надеялся, что я мог бы передать любое событие, предложенное контролем, так что в этом случае, следующий будет работать вместо:
<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>
Я не могу получить событие AutoGeneratingColumn, чтобы вызвать, и я Я надеюсь, что я что-то упустил и ценю любые советы!
Такое поведение является то же самое с GridControl от DevExpress, в том, что загруженная событие срабатывает тогда как ColumnsPopulated события (это является эквивалентом события AutoGeneratingColumn) нет.
DevExpress предложил следующую информацию относительно моего вопроса:.
"Мы рассмотрели этот вопрос, и пришли к интересному выводу Похоже, что визуальное дерево не строится в тот момент, когда взаимодействие . Обработчики обрабатываются "
Если это правда, и нет другого способа, с помощью которого можно вызвать события в ViewModel, тогда вам придется идти вперед и - используя пробную версию и ошибку - обратите внимание, какая из события DataGrid (из которых более 100) могут быть вызваны таким образом и которые не могут!
Хотелось бы думать, что каждое событие, доступное в коде, также может быть достигнуто при применении шаблона MVVM.
Я искал ответ, но я не могу исключить, что я что-то упустил, поэтому, если это так, то, пожалуйста, примите мои извинения!
Здравствуйте, Мэтт, благодарю вас за ваши комментарии. Я не могу сказать, что я действительно имел в виду WPF, но вы выбрали это. Должен признаться, что я думал, что в коде не так-то нормально обрабатывать события, поэтому приятно слышать иначе. Разумеется, бизнес-логика не сохранилась. Мне также нравится ваше предложение кода! Спасибо, что помогли этому новичку :) – Dave