所以基礎知識後不更新:我有上有一個的ListView,這是我網格的DataContext填充的窗口:ListView控件與數據表綁定,刪除一行
mainGrid.SetBinding(Grid.DataContextProperty,
new Binding() {
Source = new DataView()
{ Table = SQLHandler.GetHandler[classType.ToString()] }
}
);
在XAML
:
<ListView Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" ItemsSource="{Binding}">
一切工作正常,它已填充。正如你在上面看到的,我有一個可以被Singleton訪問的SQLHandler類,並且我可以用索引器訪問我的表。
問題:窗口加載,我選擇一行,單擊編輯按鈕,新窗口加載,我得到選定行的詳細信息。當我通過這個新窗口刪除這一行並關閉它時,主窗口(顯示完整數據表的地方)沒有相應地更新。我知道解決方案應該是什麼,但我無法讓它工作。 (Inotifyproperty改變了SqlHandler類的接口,Binding.IndexerName等)。
這裏是主要的東西:數據集不在我的SqlHandler類中,它在SqlExecuter中,我的所有sqlcommands都在執行中。
public override DataTable this[string key]
{
get
{
if (sqlExecuter.GetDataSet.Tables.Contains(key))
return sqlExecuter.GetDataSet.Tables[key];
throw new KeyNotFoundException("The specified key was not found");
}
}
其中GetDataSet是:
public DataSet GetDataSet
{
get { return ds; }
}
我怎樣才能使這項工作?當我在不同的窗口中刪除一行並關閉該行時,主窗口的列表視圖不會自行更新。 我唯一的選擇是放置一個刷新按鈕,然後重新綁定datacontext屬性,當然它的工作,但我的目標是有一個'活的'更新系統,這就是綁定是畢竟。
我試過了:SqlExecuter中的GetDataSet:實現了inotifypropertychanged接口,但沒有任何更改。並且我不能在SqlHandler的索引器上實現inotifypropertychanged,因爲它沒有setter,我總是從代碼隱藏中訪問表,我的sqldataadapter正在填充它們(填充方法)
ps :我並不打算創建一個ObservableCollection,因爲我的代碼的90%應該被重寫,並且當我刪除一行時,我清除了我的數據集並再次填充它,所以我甚至沒有期望它注意到每一個變化,只是當我填充我的數據表,我的ListView應該瞭解它..並刷新自身