Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在DataGrid中更改项目。这条路对吗?

在DataGrid中更改项目。这条路对吗?
EN

Stack Overflow用户
提问于 2019-08-05 14:19:12
回答 1查看 82关注 0票数 1

我有一个绑定到ObservableCollection的DataGrid,我确信我用来更新该集合中的项的方式不是正确的。我在刷新DataGrid时遇到了一些问题。如果我直接修改一个项目,DataGrid不会刷新,直到我单击另一个单元格。我可以看到在"Details“和"_Detail”中点击了NotifyPropertyChanged,但UI就是不刷新。在尝试了很多方法之后,我找到了一个变通方法:删除前面的项目,然后添加新的项目。问题是我不想用正确的方式去做。So...which one是什么?

C#

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class AsientoDetallesViewModel : ViewModelBase, IInteractionRequestAware, INotifyPropertyChanged
{
    private ObservableCollection<Details> details;
    public ObservableCollection<Details> Details
    {
        get => details;
        set
        {
            SetProperty(ref details, value, nameof(Details));
            NotifyPropertyChanged(nameof(Details));
        }
    }

    private Detail _detail;
    public Detail _Detail
    {
        get => _detail;
        set
        {
            SetProperty(ref _detail, value, nameof(_Detail));
            NotifyPropertyChanged(nameof(_Detail));
        }
    }

    private void UpdateRow()
    {
        var itemUpdated = _Detail;
        itemUpdated.Account.Name = "some name";
        itemUpdated.Account.Name2 = "another name";

        //the workaround
        Detalles.Remove(itemUpdated);
        Detalles.Add(itemUpdated);
    }
}

XAML

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<DataGrid ItemsSource="{Binding Details, Mode=TwoWay}"
          SelectedItem="{Binding _Details, Mode=TwoWay}"
          AutoGenerateColumns="False">
<DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Binding Path=Account.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" Margin="0, 3, 0, 0" ></TextBlock>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Account.Name2, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="0, 3, 0, 0"></TextBlock>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
         </DataGrid.Columns>
    </DataGrid>
EN

回答 1

Stack Overflow用户

发布于 2019-08-05 14:27:40

正是从Detail类的Account属性返回的对象必须实现INotifyPropertyChanged接口,并引发绑定到NameName2属性的TextBlocks的更改通知才能刷新。

AsientoDetallesViewModel是否实现INotifyPropertyChanged并不重要,因为您没有绑定到该类的属性。

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

https://stackoverflow.com/questions/57360518

复制
相关文章

相似问题

禁用Tab视图滑动以更改SwiftUI 2.0中的页

15

SwiftUI:如何更改TabView高度?

125

设置TabView - SwiftUI 2.0的背景色

131

在TabView SwiftUI中禁用项目

243

SwiftUI - TabView禁用背景透明度

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

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