我一直在努力解决与WPF的数据绑定并接收对ObservableCollection的数据网格所做的编辑。
我创建了一个datagrid,旨在允许用户只编辑一个点(X和Y)的现有值,ObservableCollection将它们称为 coordinates
网格成功填充了坐标中的任何数据。但是,每当我更改数据网格中的X或Y值时(由于某种原因,似乎有X和Y的重复列),它不会在坐标中更新(当我使用控制台时显示)。为什么会这样?
以下是XAML代码:
<DataGrid x:Name="XYDataGrid"
CanUserSortColumns="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
ColumnWidth="*"
ItemsSource="{Binding}"
LostFocus="XYDataGrid_LostFocus">
<DataGrid.Columns>
<DataGridTextColumn Header="X" Binding="{Binding X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTextColumn Header="Y" Binding="{Binding Y, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
</DataGrid>
在我的C#中:
private ObservableCollection<Point> coordinates = new ObservableCollection<Point>();
public MainWindow()
{
InitializeComponent();
coordinates.Add(new Point()
{
X = 1,
Y = 1
});
this.DataContext = coordinates;
}
private void XYDataGrid_LostFocus(object sender, RoutedEventArgs e)
{
Console.WriteLine((coordinates[0].X).ToString());
}
答案 0 :(得分:0)
就像@Clemens指出的那样,Point是一个 结构,它是值类型而非引用类型。请使用类,例如:
public class CustomPoint
{
public double X { get; set; }
public double Y { get; set; }
}
然后将集合更改为:
private ObservableCollection<CustomPoint> coordinates = new ObservableCollection<CustomPoint>();
要摆脱重复列,请通过设置AutoGenerateColumns =“False”来关注@Bradley Uffner建议:
<DataGrid x:Name="XYDataGrid"
CanUserSortColumns="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
ColumnWidth="*"
ItemsSource="{Binding}"
AutoGenerateColumns="False"
LostFocus="XYDataGrid_LostFocus">
<DataGrid.Columns>
<DataGridTextColumn Header="X" Binding="{Binding X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTextColumn Header="Y" Binding="{Binding Y, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
</DataGrid>