在WPF中对DataGrid的TwoWay绑定ObservableCollection不起作用

时间:2013-01-30 15:25:54

标签: c# wpf binding datagrid two-way-binding

我的应用程序中有这个简单的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,但我的问题不同了。

1 个答案:

答案 0 :(得分:1)

System.Windows.Points结构。您无法正确绑定其属性。

为什么呢?因为当您执行Text="{Binding X, Mode=TwoWay}"时,它会将Text的{​​{1}}属性绑定到当前TextBox的{​​{1}}属性。

X这是... 结构 DataContext然后数据绑定将修改的DataContext不是您分配给{{1}的那个}。

解决您的问题。使用创建您自己的System.Windows.Points类型:

Point

并使用DataContext进行绑定:

Point