首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在WPF中更改可观测集合项详细信息而不更新DataGrid视图的模型

在WPF中更改可观测集合项详细信息而不更新DataGrid视图的模型
EN

Stack Overflow用户
提问于 2016-09-28 17:19:11
回答 2查看 1.1K关注 0票数 1

我有一个选定的树视图项,它具有模型( employee )的ObservableCollection,当从树中选择项/雇员时,我将显示员工详细信息,如id(textblock)、name(textblock)和升级详细信息(在一个DataGrid中,它是另一个称为“PromotionHistory”的模型的可观察集合),它正确地显示了详细信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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,尽管我的观察到的项目详细信息已经成功更新。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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/视图与更改更新。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-29 00:30:34

如果您的item是类PromotionHistory的类型,那么您的类需要实现以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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事件添加或删除项方面有效果,该事件与已更改的项属性无关。

票数 2
EN

Stack Overflow用户

发布于 2016-09-28 20:44:25

每个项目都实现INotifyPropertyChanged吗?如果不是,那就是你的问题了。需要将更改通知ObservableCollection,而INotifyPropertyChanged接口会这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39759898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文