我有ObservableCollection
(点数)绑定到DataGrid
。我不知道这是不正常的,但是我编辑单元格(我的观点)所做的更改实际上并没有改变我的集合,只是改变了视图。
<DataGrid x:Name="s1Grid" ItemsSource="{Binding s1Puntos, Mode=TwoWay}"
AutoGenerateColumns="False" Width="165"
Background="#19B0C4DE" BorderThickness="1"
BorderBrush="#19D3D3D3" CanUserResizeColumns="False"
CanUserResizeRows="False" CanUserSortColumns="False"
ClipboardCopyMode="IncludeHeader" CellEditEnding="s1Grid_CellEditEnding">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=X, StringFormat='{} {0:#.00}', Mode=TwoWay}" Header="X" Width="*"/>
<DataGridTextColumn Binding="{Binding Path=Y, StringFormat='{} {0:#.00}', Mode=TwoWay}" Header="Y" Width="*" />
</DataGrid.Columns>
</DataGrid>
你看错了吗?
注意:s1Grid_CellEditEnding
是一个事件,它使用该集合发送消息以更新内容。
答案 0 :(得分:0)
您需要设置Binding UpadateSourceTrigge = PropertyChanged 。
只要您需要将更改从查看发送到 ViewModel ,就会使用此功能。在这种情况下,您正在视图中编辑您的收藏并希望反映回来进入集合您需要使用 UpdateSourceTrigger 属性。
答案 1 :(得分:0)
这是因为Point
是struct
,这意味着当您绑定ItemsSource
时,控件将枚举您的源集合以创建Items
,struct
,和任何其他值类型,意味着创建一个副本。长话短说,DataGrid
正在更改Point
项,但只有它自己的副本。