【问题标题】:XamDataGrid - SelectedItems empty on click on editable cellXamDataGrid - 单击可编辑单元格时 SelectedItems 为空
【发布时间】:2013-07-31 14:48:14
【问题描述】:

当我单击可编辑的单元格时,我注意到 XamDataGrid 的 SelectedItems 属性为空。

如果 SelectedItems 集合不可编辑,则将在网格中反映所选记录的可视指示。

这是一个错误吗?是否有一种解决方法可以通过单击可编辑单元格来获取 selectedItems?

这是一个反映这种行为的简单示例:

xaml:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <TextBox Name="TextBox1"></TextBox>
    <DataPresenter:XamDataGrid Grid.Column="1" Name="XamDataGrid" >
        <DataPresenter:XamDataGrid.FieldLayouts>
            <DataPresenter:FieldLayout>
                <DataPresenter:Field Name="FirstName" />
                <DataPresenter:Field Name="LastName" >
                    <DataPresenter:Field.Settings>
                        <DataPresenter:FieldSettings AllowEdit="False"/>
                    </DataPresenter:Field.Settings>
                </DataPresenter:Field>
            </DataPresenter:FieldLayout>
        </DataPresenter:XamDataGrid.FieldLayouts>
    </DataPresenter:XamDataGrid>
</Grid>

代码:

   public partial class MainWindow : Window
   {
      public MainWindow()
      {
         InitializeComponent();
         var persons = new List<Person>();
         persons.Add(new Person(){FirstName = "Jim",LastName = "Miller"});
         persons.Add(new Person(){FirstName = "James",LastName = "Bond"});
         XamDataGrid.DataSource = persons;
         XamDataGrid.SelectedItemsChanged += PrintNewSelection;
      }

      private void PrintNewSelection(object sender, SelectedItemsChangedEventArgs e)
      {
         foreach (ISelectableItem selectedItem in XamDataGrid.SelectedItems)
         {
            object item=null;
            if (selectedItem is Cell)
            {
               item = (selectedItem as Cell).Record.DataItem;

            }
            else if (selectedItem is DataRecord)
            {
               item = (selectedItem as DataRecord).DataItem;
            }
            TextBox1.Text += item + "\r\n";
         }
      }
   }

   internal class Person
   {
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public override string ToString()
      {
         return FirstName + " " + LastName;
      }
   }

如果我点击“Bond”“Miller”然后点击“James”,我会得到以下信息:

即使“詹姆斯邦德”记录显示为选中状态,它也不在 SelectedItems 集合中。

如果您显示有关所选记录的附加信息,这会很烦人。

【问题讨论】:

    标签: c# .net xaml infragistics xamdatagrid


    【解决方案1】:

    我也询问了 Infragistics 支持,他们的解决方案是处理 Grid 的 EditModeStarting 事件并将 Cell 的 IsSelected 属性设置为 true:

        private void XamDataGrid_EditModeStarting_1(object sender, EditModeStartingEventArgs e)
        {
            e.Cell.IsSelected = true;
        }
    

    【讨论】:

      【解决方案2】:

      您看到的行为是预期的,并且仅当您允许进入编辑模式时记录才处于活动状态。由于您希望显示有关所选记录的其他信息,因此我假设您只想选择一条记录,并且可以改用 ActiveRecord

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        • 2016-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多