Silverlight DataGrid列绑定到对象不刷新

Silverlight DataGrid列绑定到对象不刷新,silverlight,data-binding,silverlight-4.0,datagrid,Silverlight,Data Binding,Silverlight 4.0,Datagrid,我已将DataGrid绑定到IEnumerable。对象具有EntityCollection属性,它是名称访问。然后我把这个放进去 <sdk:DataGridTextColumn Binding="{Binding Path=Accesses, Converter={StaticResource AccessesToTextConverter}}" Header="Access"/> 一切正常。但当我将

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

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


一切正常。但当我将Access对象添加到viewmodel中的Access时,DataGrid也不会刷新。为什么?:)

您正在将项添加到IEnumerable集合中,datagrid不会对该集合执行任何操作。您绑定到的集合必须实现INotifyCollectionChanged,datagrid才能自动更新

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

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

为了从代码中更新UI,您需要为模式指定双向:

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


我将对象直接添加到Access集合中。它已经改变了inotifycollection.Thx。我正在使用Ria服务。我认为在我的情况下,将所有集合放到另一个集合是不好的。你是对的,你应该能够直接将datagrid分配给RIA中的暴露属性。你在这么做吗?或者指定包含RIA对象的对象枚举。确保Access属性在其集合作为属性更改而更改时发出通知。抱歉-我混淆了DataGrid绑定的列绑定。DataGrid上的ItemsSource绑定是否具有Mode=TwoWay?