我的应用程序中有这个简单的DataGrid。在源代码的某处,我将ItemsSource
属性绑定到ObservableCollection<System.Windows.Points>
。所以这些点显示在DataGrid
中。问题是我设置了TwoWay
绑定,但是当更改DataGrid
中的点坐标值时,ObservableCollection
中的实际点值不会改变!
出了什么问题?
<DataGrid Name="pointList" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="X" Width="200">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=X, Mode=TwoWay}"></TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Y" Width="200">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Y, Mode=TwoWay}"></TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
注意我看过this,但我的问题不同了。
答案 0 :(得分:1)
System.Windows.Points
是结构。您无法正确绑定其属性。
为什么呢?因为当您执行Text="{Binding X, Mode=TwoWay}"
时,它会将Text
的{{1}}属性绑定到当前TextBox
的{{1}}属性。
X
这是... 结构 DataContext
然后数据绑定将修改的DataContext
不是您分配给{{1}的那个}。
解决您的问题。使用类创建您自己的System.Windows.Points
类型:
Point
并使用DataContext
进行绑定:
Point