私は、簡単な操作を行うための小さなDataGridを持っています。フィールドは3:Number 1、2、およびResult Numberです。 データグリッドコードは次の通りである:ObservableCollectionのデータを変更するとDataGridデータが更新されないのはなぜですか?
<DataGrid x:Name="dgNumbers" ItemsSource="{Binding lstOperations, Mode=TwoWay}" CanUserAddRows="True" AutoGenerateColumns="False" CellEditEnding="dgNumbers_CellEditEnding">
<DataGrid.Columns>
<DataGridTextColumn Header="Number 1" Width="*" Binding="{Binding N1, Mode=TwoWay}"/>
<DataGridTextColumn Header="Number 2" Width="*" Binding="{Binding N2, Mode=TwoWay}"/>
<DataGridTextColumn Header="Result" Width="*" Binding="{Binding Result, Mode=TwoWay}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
私は数1、数および結果を保つオブジェクトを作成しました。これは、クラスコードです:
public class Numbers
{
public decimal N1 { get; set; }
public decimal N2 { get; set; }
public decimal Result { get; set; }
}
私はのObservableCollectionを作ることバインディングを理解しようとするために、この小さな例を作りました。この例では 、私持ってイベントに次のコード:
私はデータ収集を変更し、この事実は、データグリッドに反映されているかどうかを知るにしようとしています何public MainWindow()
{
InitializeComponent();
lstOperations = new ObservableCollection<Numbers>();
}
ObservableCollection<Numbers> lstOperations;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Numbers n = new Numbers();
n.N1 = 10;
n.N2 = 5;
n.Result = 15;
lstOperations.Add(n);
dgNumbers.ItemsSource = lstOperations;
}
private void dgNumbers_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
foreach(var item in lstOperations)
{
item.Result = item.N1 + item.N2;
}
}
、可能な場合、どのように右のそれを行うには? 、可能でない場合、どのように似たようなものを達成するために?
をバインドするとき、私のためにそれが動作するには、ビューに表示されるはずです。問題は、コレクション全体を変更したり、アイテムの単一のプロパティを変更したりする場合に発生します。どちらの場合も、私はあなたにINotifyPropertyChangedインターフェイスを使用するようアドバイスします。 PrismのBindableBaseクラスを使用することもできますが、あなたの場合は、既にMainWindowクラスを継承しているため、独自に実装を記述する必要があります。 – mikes
クラスの仕組みは?あなたは私に例を教えていただけますか? – Richard