简单的双向绑定silverlight数据网格到列表<;T>;问题

本文关键字:lt 列表 问题 gt 网格 绑定 silverlight 数据网 数据 简单 | 更新日期: 2023-09-27 18:00:41

我有一个使用RIA DataDomainService的silverlight应用程序。

Silverlight应用程序有一个带有DataGrid的页面。

我已经将DataGrid的ItemSource属性设置为Loaded事件中的列表,例如

//gets the list
List<Data> data = GetTheList();//returns the list of data
dataGrid.ItemSource = data;

这是第一次。第二次,我使用了上面相同的行,但我在列表中插入了一个新的Data对象,然后使用dataGrid.ItemSource=数据,但不更新网格网格保持不变。

在xaml方面,在DataGrid标记中:

ItemSouce = {Binding data, Mode=TwoWay}

这种绑定正确吗?为什么第一次绑定而不是第二次绑定到新列表?

简单的双向绑定silverlight数据网格到列表<;T>;问题

首先,在XAML和代码中设置ItemSource是多余的——后面的代码将覆盖XAML绑定设置。

尝试使用ObservableCollection而不是List——当添加或删除项目时,它会自动通知View。那么你就不需要设置数据了。ItemSource不止一次。

ObservableCollection<Data> data = GetTheList();
dataGrid.ItemSource = data;

当您在ObservableCollection中添加或删除项目时,网格应该会自动更改。您必须确保GetTheList()返回一个ObservableCollection,并使用它来存储您的"Data"对象。

*编辑-如果使用ObservableCollection与现有代码不匹配,请尝试在更新ItemsSource之前将其设置为null。例如:

private void updateMyDataGrid()
{
    List<Data> data = GetTheList();
    dataGrid.ItemSource = null;
    dataGrid.ItemSource = data;
}

首先,您不需要进行"重新绑定"并再次设置项源,这意味着当新的数据对象添加到列表中时,数据网格将自动更新。

此链接应该有助于:http://www.codeproject.com/KB/grid/DataGrid_Silverlight.aspx

您需要使用ObservableCollection,并且该类应该实现INotifyPropertyChanged接口。

ObservableCollection<Data> data = GetTheList();
dataGrid.ItemSource = data;

类似这样的东西:

private ObservableCollection<Data>data;
    public ObservableCollection<Data>Data{
        get { return data; }
        set
        {
            data=value;
            // Call NotifyPropertyChanged when the property is updated
            NotifyPropertyChanged("Data");
        }
    }

// Declare the PropertyChanged event
public event PropertyChangedEventHandler PropertyChanged;
// NotifyPropertyChanged will raise the PropertyChanged event passing the
// source property that is being updated.
public void NotifyPropertyChanged(string propertyName)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}