2010-05-04 126 views
2

我剛剛開始使用silverlight。 基本上我有一個silverlight用戶控件,它具有各種dataGrid和一個組合框,它們的項目源設置爲自定義純c#對象的屬性。 我的問題是,我有一個下拉列表,當用戶從列表中選擇一個項目,一個新行應出現在其中一個網格。 我所做的只是處理SelectionChanged事件並將新項目添加到我的自定義對象中的列表中,並再次爲網格設置項目源。這似乎不工作;沒有行被添加到數據網格 我不知道如何強制我的網格「重新綁定」到此屬性。 我一直在閱讀關於依賴屬性,這些是我需要的嗎?Silverlight - 重新綁定到一個屬性?

任何指針將非常感激。

回答

3

您綁定的列表應該是ObservableCollection類型。然後datagrid應該自動顯示新項目。

2

問題是,當您將相同的列表分配給ItemsSource時,DataGrid知道它與列表相同,因此它什麼都不做。

由於亨裏克指出你應該暴露的是綁定到多項目控制,如DataGridListBox

另外你的「純C#對象」的ItemsSource性能特性的Observable<T>不是List<T>應該實現INotifyPropertyChanged接口,如果您想要通過代碼對這些屬性所做的更改自動顯示在UI中。

1

你可能想要做的是更新綁定源 - 這相對容易完成。

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

這是一件有趣的事,但會做你所需要的事情。實施INotifyPropertyChanged是另一個很好的建議。

Silverlight show有一些很好的信息在INotifyPropertyChangedhere