【问题标题】:Silverlight DataGrid column bind to object dont refreshSilverlight DataGrid 列绑定到对象不刷新
【发布时间】:2023-04-09 11:28:01
【问题描述】:

我已将 DataGrid 绑定到 IEnumerable。对象具有 EntityCollection 属性,它是名称 Accesses。然后我把这个放进去

    <sdk:DataGridTextColumn
                 Binding="{Binding Path=Accesses, Converter={StaticResource AccessesToTextConverter}}"
                 Header="Access"/>

一切正常。但是,当我在视图模型中将 Access 对象添加到 Accesses 时,DataGrid 不会刷新。为什么? :)

【问题讨论】:

    标签: silverlight data-binding silverlight-4.0 datagrid


    【解决方案1】:

    您正在向 IEnumerable 集合中添加项目,数据网格不会对其执行任何操作。您绑定到的集合必须实现 INotifyCollectionChanged 才能使数据网格自动更新。

    如果您使用的集合将您的 RIA 服务结果保存为对象集合中的属性,该对象集合被分配为您的 ItemsSource,请确保将 CollectionChanged 事件连接到对象的 PropertyChanged 事件,如下所示:

        public EntityCollection accesses;
        public EntityCollection Accesses
        {
            get { return accesses; }
            set
            {
                OnPropertyChanged("Accesses");
                value.CollectionChanged += (sender, e) => { OnPropertyChanged("Accesses"); };
                accesses = value;
            }
        }
    

    【讨论】:

    • 我将对象直接添加到 Accesses 集合中。它有 INotifyCollectionChanged。
    • 谢谢。我正在使用 Ria 服务。我认为在我的情况下,将所有收藏都放到另一个收藏中并不好。
    • 您的权利,您应该能够将数据网格直接分配给来自 RIA 的公开属性。你在做这个吗?或者您正在分配包含 RIA 对象的对象的枚举。确保 Accesses 属性在其集合随着属性更改而更改时发出通知。
    【解决方案2】:

    您需要为模式指定 TwoWay 以便从代码中更新 UI 的一件事:

    <sdk:DataGridTextColumn                 
        Binding="{Binding Path=Accesses, Mode=TwoWay, Converter={StaticResource AccessesToTextConverter}}"  Header="Access"/>
    

    【讨论】:

    • 抱歉 - 我混淆了 DataGrid 绑定的列绑定。 DataGrid 上的 ItemsSource 绑定是否有 Mode=TwoWay?
    猜你喜欢
    • 2013-08-26
    • 2015-01-16
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2011-01-02
    • 2021-10-20
    相关资源
    最近更新 更多