В настоящее время я внимательно изучаю превосходный инструментарий от Лорана, и у меня есть следующий вопрос.
Из Blend 4 я добавил EventTrigger для события Loaded,в моей 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 содержит следующее (для 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.Я использовал событие 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>
Мне не удается вызвать событие AutoGeneratingColumn, и я надеюсь, что что-то упустил из виду и ценю любые советы!
Это поведение аналогично GridControl из DevExpress, в том, что Loadedсобытие вызвано, тогда как событие ColumnsPopulated (это эквивалент события AutoGeneratingColumn) не является.
DevExpress предложил следующую информацию относительно моего вопроса:
" Мы рассмотрели этот вопрос и пришли к интересному выводу. Похоже, визуальное дерево не строится в момент обработки Interaction.Triggers"
Если этоистина, и нет другого способа вызвать события в ViewModel, тогда нужно было бы пойти ахead и - используя метод проб и ошибок - обратите внимание, какие из событий DataGrid (из которых более 100) могут быть вызваны таким образом, а какие нет!
Хотелось бы думать, что каждое доступное событиев коде позади, также может быть достигнуто при применении шаблона MVVM.
Я искал ответ, но не могу исключить, что что-то упустил, поэтому, если это так, то, пожалуйста,прими мои извинения!