【问题标题】:DataGrid disabling rows wpfDataGrid禁用行wpf
【发布时间】:2012-10-04 15:32:45
【问题描述】:

我有一个 DataGrid,用户只能使用绑定到视图模型的添加命令输入新行。下面显示的附加行为会激活正确的单元格。

我现在想要做的是有效地使新行成为“模态”。也就是说,在新行有效并提交或取消编辑之前,我不希望用户能够对网格执行任何其他操作。

假设我的视图模型知道它何时有效并实现了 IEditableObject,我可以从我的附加行为中得到所有这些吗?必须做什么?

干杯,
浆果

代码

public class NewItemAddedByCommandBehavior : Behavior<DataGrid>
{
    private MainWindowViewModel _vm;

    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.DataContextChanged += OnAssociatedObject_DataContextChanged;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        AssociatedObject.DataContextChanged -= OnAssociatedObject_DataContextChanged;
        _vm.NewItemAddedByCommand -= OnNewItemAddedByCommand;
    }

    private void OnAssociatedObject_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) {
        _vm = (MainWindowViewModel) AssociatedObject.DataContext;
        _vm.NewItemAddedByCommand += OnNewItemAddedByCommand;
    }

    private void OnNewItemAddedByCommand(object sender, EventArgs e)
    {
        var currentItem = _vm.SelectedItem;
        var col = AssociatedObject.Columns[1];
        AssociatedObject.CurrentCell = new DataGridCellInfo(currentItem, col);
        AssociatedObject.ScrollIntoView(currentItem, col);
        AssociatedObject.Focus();
        AssociatedObject.BeginEdit();
    }
}

【问题讨论】:

    标签: wpf datagrid


    【解决方案1】:

    This post 大致告诉了我如何做到这一点:

    1. 向绑定的视图模型项添加 IsReadOnly 属性
    2. 向绑定的视图模型项添加 IsNew 属性
    3. 在vm中,在实际添加item之前,设置所有已有item IsReadOnly = true
    4. 当新添加的项目被编辑或取消编辑时,将所有项目的 IsReadOnly 设置回 false
    5. 修改类似于发布答案的行为(奇怪的是不是接受的答案)但没有 ReadOnlyService
    6. 为 DataGridRow 设置样式

    回报

    【讨论】:

      【解决方案2】:
      <DataGrid.RowStyle>
          <Style TargetType="{x:Type DataGridRow}">
              <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
          </Style>
      </DataGrid.RowStyle>
      

      【讨论】:

      • 不建议发布纯代码答案,答案应提供有关代码的更多解释,使其答案更有用,更有可能吸引投票From Review
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2015-12-10
      • 2011-01-30
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      相关资源
      最近更新 更多