我有我的datagrid:
<DataGrid CanUserSortColumns="False" x:Name="TablePreviewDataGrid"
SelectionMode="Single"
SelectionUnit="CellOrRowHeader"
SelectedValuePath="{Binding Item}"
SelectedCellsChanged="DataGrid_OnSelectedCellsChanged"
IsReadOnly="True" ItemsSource="{Binding TableData}"
AutoGenerateColumns="True">
<DataGrid.Resources>
<Style TargetType="DataGridColumnHeader">
<EventSetter Event="Click" Handler="EventSetter_OnHandler" />
</Style>
</DataGrid.Resources>
</DataGrid>
和绑定:
private DataTable _tableData;
public DataTable TableData
{
get { return _tableData; }
set { SetProperty(ref _tableData, value); }
}
private object _selectedItem;
public object Item
{
get { return _selectedItem; }
set { SetProperty(ref _selectedItem, value); }
}
单击网格单元格时, Item
属性未更新。 Howewer,如果我删除
SelectionMode="Single"
SelectionUnit="CellOrRowHeader"
绑定工作正常。
有人知道为什么会这样吗?
答案 0 :(得分:3)
DataGrid.SelectionUnit
Property页面,它会说:
获取或设置一个值,该值指示是否可以在
DataGrid
中选择行,单元格或两者。
最常见(默认)值为FullRow
,因此您可以尝试此操作。
如果您查看MSDN上的Selector.SelectedValue
Property页面,则会说:
获取或设置使用
SelectedItem
获得的SelectedValuePath
的值。
因此,您的第一个问题是您没有将SelectedValuePath
属性设置为要传递到SelectedValue
属性的属性的名称。但是,通常将与DataGrid.ItemsSoucre
集合中的项目相同类型的对象数据绑定到SelectedItem
属性,然后可以绑定到整个选定的项目对象。
我怀疑删除SelectionMode
属性会对这种情况产生任何影响。因此,为了解决您的问题,我将DataGrid.SelectionUnit
属性设置为FullRow
,数据绑定到SelectedItem
属性,而不是使用SelectedValue
和{{1} }属性。您可以在MSDN上的How to: Use SelectedValue, SelectedValuePath, and SelectedItem页面中找到这些所选项目属性之间的进一步差异。
答案 1 :(得分:1)
您的罪魁祸首是SelectionUnit="CellOrRowHeader"
和SelectedValuePath="{Binding Item}".
由于DataGrid
中的每一行代表数据项,因此选择完整行将选择项目,或SelectionUnit="FullRow"
将选择项目。否则,如果您有其他SelectionUnit,那么您可以SelectedItem
DataGrid.SelectedCells[0].Item
此外,您不能绑定SelectedValuePath
,但SelectedValue