2012-10-22 3 views
3

Я использую XamDataGrid для отображения моих данных. Теперь я хочу добавить разные команды в каждый столбец.Как добавить команду к событию, связанному с xamdatagrid, без нарушения MVVM

Использование события CellActivated на всей сетке, а затем привязка к ActiveCell не работает, так как Viewmodel должен был знать о представлении и как оценивать столбцы из объекта, возвращаемого ActiveCell.

Я ищу способ показать XamDataGrid, какую команду следует вызывать.

Я представляю себе что-то вроде этого:

<igDP:Field Name="Dev"     > 
    <igDP:Field.Settings> 
     <igDP:FieldSettings CellValuePresenterStyle="{StaticResource DevStyle}" ActivateCommand="{Binding DevCommand}/> 
    </igDP:Field.Settings> 
</igDP:Field> 

Я действительно не волнует, если команда должна быть собственностью моей ViewModel или DataItem.

Как это реализовать?

Спасибо

+0

Привет, Я все еще ищу решение. Может ли кто-нибудь помочь? – mtxviper

ответ

1

Attached Behavior и MVVM идет рука об руку.

Обращайтесь к своему событию через прикрепленное поведение и поставьте Viewmodel.ICommand ему, который он выполнил бы при обработке события. Затем вы можете отправить аргументы событий из обработанного события через параметр ViewModel.ICommand в качестве параметра команды.

Вашего вложенное свойство

public static class MyBehaviors { 

    public static readonly DependencyProperty CellActivatedCommandProperty 
     = DependencyProperty.RegisterAttached(
      "CellActivatedCommand", 
      typeof(ICommand), 
      typeof(MyBehaviors), 
      new PropertyMetadata(null, OnCellActivatedCommandChanged)); 

    public static ICommand CellActivatedCommand(DependencyObject o) 
    { 
     return (ICommand)o.GetValue(CellActivatedCommandProperty); 
    } 

    public static void SetCellActivatedCommand(
      DependencyObject o, ICommand value) 
    { 
     o.SetValue(CellActivatedCommandProperty, value); 
    } 

    private static void OnCellActivatedCommandChanged(
      DependencyObject d, 
      DependencyPropertyChangedEventArgs e) 
    { 
     var xamDataGrid = d as XamDataGrid; 
     var command = e.NewValue as ICommand; 
     if (xamDataGrid != null && command != null) 
     { 
      xamDataGrid.CellActivated += 
       (o, args) => 
       { 
        command.Execute(args); 
       }; 
     } 
    } 
} 

Вашего XAML:

<infragistics:XamDataGrid ... 
     local:MyBehaviors.CellActivatedCommand="{Binding MyViewModelCommand}" /> 

Надеется, что это помогает.

+0

Будет ли этот CellActivatedCommand привязана к одному желаемому столбцу? Вы не указали, где бы вы установили CellActivatedCommand. – mtxviper

+0

Я следил за решением, заданным (WPF-it). Оно работает –