我注意到当我点击一个可编辑的单元格时,XamDataGrid的SelectedItems属性为空。
如果它不可编辑,则SelectedItems Collection会反映网格中所选记录的可视指示。
这是一个错误吗?当通过单击可编辑单元格选择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”,我会得到以下内容:
即使“James Bond”记录显示为已选中,它也不在SelectedItems集合中。
如果您显示有关所选记录的其他信息,则会非常恼火。
答案 0 :(得分:3)
我也问过Infragistics支持,他们的解决方案是处理Grid的EditModeStarting事件,并将Cell的IsSelected属性设置为true:
private void XamDataGrid_EditModeStarting_1(object sender, EditModeStartingEventArgs e)
{
e.Cell.IsSelected = true;
}
答案 1 :(得分:1)
您可以看到预期的行为,并且只有在您允许进入编辑模式时,该记录才会处于活动状态。由于您希望显示有关所选记录的其他信息,我假设您只想选择一条记录,而您可以使用ActiveRecord代替。