我有一个选定的树视图项,它具有模型( employee )的ObservableCollection,当从树中选择项/雇员时,我将显示员工详细信息,如id(textblock)、name(textblock)和升级详细信息(在一个DataGrid中,它是另一个称为“PromotionHistory”的模型的可观察集合),它正确地显示了详细信息。
<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>
在一个按钮(“UpdateLocation”)上,当我通过代码更改视图模型中的PromotionHistory数据集中的位置名称单元格值时,这些更改不会反映回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本身(例如添加/删除项)没有改变,而是只改变了集合中的项。但是,我无法使ui/视图与更改更新。
发布于 2016-09-29 08:30:34
如果您的item
是类PromotionHistory
的类型,那么您的类需要实现以下内容:
public class PromotionHistory : INotifyPropertyChanged
{
private string _name;
public string Name {
get { return _name; }
set {
_name = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
PropertyChanged
事件正在更新您的UI。ObservableCollection仅在通过CollectionChanged
事件添加或删除项方面有效果,该事件与已更改的项属性无关。
发布于 2016-09-29 04:44:25
每个项目都实现INotifyPropertyChanged吗?如果不是,那就是你的问题了。需要将更改通知ObservableCollection,而INotifyPropertyChanged接口会这样做。
https://stackoverflow.com/questions/39759898
复制相似问题