3

我正在使用 XamDataGrid 来显示我的数据。现在我想为每一列添加不同的命令。

在整个网格上使用 CellActivated 事件然后绑定到 ActiveCell 将不起作用,因为 Viewmodel 必须了解 View 以及如何从 ActiveCell 返回的对象中评估 Column。

我正在寻找一种方法来告诉 XamDataGrid 应该调用哪个命令。

我想象这样的事情:

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

我真的不在乎命令是否必须是我的视图模型或数据项的属性。

我该如何实施?

谢谢你

4

1 回答 1

1

Attached BehaviorMVVM齐头并进。

通过附加行为处理您的事件并提供Viewmodel.ICommand给它,它会在处理事件时执行。然后,您可以将已处理事件中的事件参数发送到ViewModel.ICommandas 命令参数。

您的附属财产

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

希望能帮助到你。

于 2012-10-23T12:26:42.467 回答