简单的双向绑定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}
这种绑定正确吗?为什么第一次绑定而不是第二次绑定到新列表?
首先,在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));
}
}