繁体   English   中英

WPF datagrid selectedvalue / selecteditem绑定不起作用

[英]WPF datagrid selectedvalue/selecteditem bindings does not work

我有我的数据网格:

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

绑定工作正常。

有人知道为什么会这样吗?

MSDN知道。 如果您查看MSDN上的DataGrid.SelectionUnit属性页,它将显示:

获取或设置一个值,该值指示是否可以在DataGrid选择行,单元格或两者。

最常用(也是默认)的值是FullRow ,因此您可以尝试一下。

如果您查看MSDN上的Selector.SelectedValue属性页,它会说:

获取或设置的值SelectedItem ,通过使用获得的SelectedValuePath

因此,您的第一个问题是您没有将SelectedValuePath属性设置为要传递给SelectedValue属性的属性的名称。 但是,通常将数据类型与DataGrid.ItemsSoucre集合中的项目相同类型的对象绑定到SelectedItem属性,然后可以绑定到整个所选项目对象。

我怀疑删除SelectionMode属性在这种情况下是否会有所不同。 因此,为解决您的问题,我将DataGrid.SelectionUnit属性设置为FullRow并将数据绑定到SelectedItem属性,而不是使用SelectedValueSelectedValuePath属性。 您可以在MSDN上的“ 如何:使用SelectedValue,SelectedValuePath和SelectedItem”页中找到这些选定项属性之间的进一步区别。

您的罪魁祸首是SelectionUnit="CellOrRowHeader"SelectedValuePath="{Binding Item}".

由于DataGrid每一行都代表数据项,因此选择完整行将选择该项,或者SelectionUnit="FullRow"将选择该项。 否则,如果您还有其他SelectionUnit,则可以通过DataGrid.SelectedCells[0].Item获取SelectedItem

另外,您不绑定SelectedValuePath而是SelectedValue

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM