モデルのObservableCollection(従業員)を持つ選択されたツリービューアイテムがあり、アイテム/従業員がツリーから選択されたとき、 id(textblock)、name(textblock)、プロモーションの詳細(「PromotionHistory」と呼ばれる別のモデルの観測可能なコレクションであるDataGrid)などの詳細を表示し、詳細を正しく表示します。ボタン(「UpdateLocation」)の際観察可能なコレクション項目の変更を伴うモデルが更新されないモデルWPFのDataGridビューMVVM
<TreeView x:Name="EmployeesDataTree" ItemsSource="{Binding Employees}"/>
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding ElementName=EmployeesDataTree, Path=SelectedItem.EmployeePromotionDetails}">
<DataGrid.Columns>
<DataGridTextColumn Header="Employee Promotion Id" Binding="{Binding Name}" />
<DataGridTextColumn Header="Employee NewTitle" Binding="{Binding NewTitle}" />
<DataGridTextColumn Header="Employee Location " Binding="{Binding Location}" />
....
</DataGrid.Columns>
</DataGrid>
私はコードを私のviewmodelにPromotionHistoryのDataGrid内の場所名のセルの値を変更したときにクリック私のObservableCollection項目の詳細が成功してきたが、変更が戻ってUIに反映されていません更新しました。
foreach (var item in (SelectedEmployeeItem as EmployeeModel).EmployeePromotionDetails)
{
// condition which hits service and verify if the location name is up to date by searching with id and updates.
if(condition)
{
item.Name = "New Location";
}
}
は、このサイト上でいくつかの研究の後、私は私の問題は、それ自体のObservableCollection(このような項目を追加/削除など)は変更されませんでしたが、そのコレクションINSIDE項目だけであることがわかりました。しかし、私は、ui/viewを変更して更新することができませんでした。
項目は、INotifyPropertyChangedを実装する必要があります。あなたの研究はその事実を立証したはずです。当然のことながら、 'item.Name'のセッターコードを共有する考えはありません(これは結局のところです)。しかし、' PropertyChanged'は発生しませんよね?これを間違える方法はほとんどありません。それはほとんどすべてです。 –
[ObservableCollectionの可能な複製] WPFバインディングの表示が更新されていません。(http://stackoverflow.com/questions/14404495/observablecollectiont-wpf-binding-display-not-updating) –
ビューを表示するように 'Mode = TwoWay'を追加してみてくださいソースが変更されたときに更新される可能性があります。例えば。 'Binding =" {Binding Name、Mode = TwoWay} "' NewTitle'と 'Location'と同じです。 –