-1
저는 WPF로 데이터를 바인딩하고 ObservableCollection에 대한 DataGrid에 대한 편집을받는 것에 대해 고민하고 있습니다. WPF - 바인딩이 2 가지 방식으로 작동하지 않는 이유는 무엇입니까?
가 나는 ObservableCollection에 그들이 가 그리드가 성공적으로 에 어떤 데이터로 채워좌표라고 잡고, 사용자는 점 (X와 Y)에 대한 값을 기존 편집 할 수 있도록 설계된 데이터 그리드를 만든 좌표. 그러나 X 또는 Y 값을 데이터 격자에서 변경할 때마다 (어떤 이유로 인해 X와 Y에 대한 중복 열이 만들어진 것처럼 보임) 좌표는으로 업데이트되지 않습니다. 콘솔). 왜 이런 경우입니까?
<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());
}
'AutoGenerateColumns = "False"를 추가하여 DataGrid에 추가 열을 제거하십시오. 기본적으로 그리드는'DataContext'에서 찾은 속성을 기반으로 열을 생성합니다. –
Point는 구조체이므로 [참조 유형]이 아닙니다 (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types). – Clemens
그렇지 않은 경우 INotifyPropertyChanged 인터페이스를 구현해야합니다. –