Как добавить команду в событие активации ячейки xamdatagrid, не нарушая MVVM

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

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

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

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

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

Мне все равно, должна ли команда быть свойством моей модели представления или элемента данных.

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

Благодарю вас


person mtxviper    schedule 22.10.2012    source источник
comment
Привет, я все еще ищу решение. Кто-нибудь может помочь?   -  person mtxviper    schedule 29.01.2013


Ответы (1)


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

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

Ваш прикрепленный ресурс

 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}" />

Надеюсь, поможет.

person WPF-it    schedule 23.10.2012
comment
Будет ли эта CellActivatedCommand привязана только к одному желаемому столбцу? Вы не указали, где бы вы установили CellActivatedCommand. - person mtxviper; 28.12.2012