我刚刚开始使用silverlight。 基本上我有一个silverlight用户控件,它有各种dataGrids和一个组合框,它们的项源设置为自定义普通c#对象的属性。 我的问题是我有一个下拉列表,当用户从列表中选择一个项目时,一个新行应出现在其中一个网格中。 我正在做的就是处理SelectionChanged事件并将新项添加到我的自定义对象中的列表并再次为网格设置itemsource。这似乎不起作用;没有行添加到dataGrid 我不知道如何强制我的网格“重新绑定”到这个属性。 我一直在阅读有关依赖属性的内容,这些是我需要的吗?
任何指针都会非常感激。
答案 0 :(得分:3)
您要绑定的列表应为ObservableCollection类型。然后数据网格应自动显示新项目。
答案 1 :(得分:2)
问题在于,当您为ItemsSource
分配相同的列表时,DataGrid
知道它的相同列表,因此它什么都不做。
正如Henrik所指出的,对于要绑定到Observable<T>
等多项控件的List<T>
属性的属性,您应该公开ItemsSource
而不是DataGrid
, ListBox
等。
此外,如果您希望代码对这些属性所做的更改自动显示在UI中,那么您的“普通c#对象”应该实现INotifyPropertyChanged
接口。
答案 2 :(得分:1)
您可能想要做的是更新绑定源 - 这相对容易完成。
private void ComboBox_SelectionChanged(object sender, RoutedEventArgs e)
{
this.dataGrid.GetBindingExpression(DataGrid.ItemsSource).UpdateSource();
}
这有点黑客但会做你需要它做的事情。实施INotifyPropertyChanged
是另一个很好的建议。
Silverlight节目在INotifyPropertyChanged
here