0

我有一个ObservableCollection(Points) 绑定到一个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是一个发送消息以使用该集合更新某些内容的事件。

4

2 回答 2

0

您需要设置 Binding UpadateSourceTrigge=PropertyChanged

每当您需要将更改从您的视图发送到ViewModel时,都会使用此方法。在这种情况下,您正在视图中编辑您的集合并希望反映回您的集合中您需要使用UpdateSourceTrigger属性。

于 2013-07-26T11:56:53.270 回答
0

这是因为Pointis astruct这意味着当您 bind 时ItemsSource,控件将枚举您的源集合以创建Itemswhich forstruct和任何其他值类型意味着创建一个副本。长话短说,DataGrid正在改变Point项目,但只有它自己的副本。

于 2013-07-26T23:11:06.913 回答