Silverlight - 重新绑定房产?

时间:2010-05-04 11:32:36

标签: silverlight binding dependency-properties

我刚刚开始使用silverlight。 基本上我有一个silverlight用户控件,它有各种dataGrids和一个组合框,它们的项源设置为自定义普通c#对象的属性。 我的问题是我有一个下拉列表,当用户从列表中选择一个项目时,一个新行应出现在其中一个网格中。 我正在做的就是处理SelectionChanged事件并将新项添加到我的自定义对象中的列表并再次为网格设置itemsource。这似乎不起作用;没有行添加到dataGrid 我不知道如何强制我的网格“重新绑定”到这个属性。 我一直在阅读有关依赖属性的内容,这些是我需要的吗?

任何指针都会非常感激。

3 个答案:

答案 0 :(得分:3)

您要绑定的列表应为ObservableCollection类型。然后数据网格应自动显示新项目。

答案 1 :(得分:2)

问题在于,当您为ItemsSource分配相同的列表时,DataGrid知道它的相同列表,因此它什么都不做。

正如Henrik所指出的,对于要绑定到Observable<T>等多项控件的List<T>属性的属性,您应该公开ItemsSource而不是DataGridListBox等。

此外,如果您希望代码对这些属性所做的更改自动显示在UI中,那么您的“普通c#对象”应该实现INotifyPropertyChanged接口。

答案 2 :(得分:1)

您可能想要做的是更新绑定源 - 这相对容易完成。

private void ComboBox_SelectionChanged(object sender, RoutedEventArgs e)
{
    this.dataGrid.GetBindingExpression(DataGrid.ItemsSource).UpdateSource();
}

这有点黑客但会做你需要它做的事情。实施INotifyPropertyChanged是另一个很好的建议。

Silverlight节目在INotifyPropertyChanged here

上有一些很棒的信息