-1
私は、WPFでデータバインディングを行い、ObservableCollectionのデータグリッドに対して編集を受け取るのに苦労しました。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#で:ここで
は、XAMLコードである
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'で見つかったプロパティに基づいて列を作成します。 –
ポイントは構造体なので、[参照型](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types)ではありません。 – Clemens
INotifyPropertyChangedインターフェイスを実装する必要があります。 –