2012-12-26 59 views
6

所以基礎知識後不更新:我有上有一個的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應該瞭解它..並刷新自身

回答

0

您可能需要綁定模式設置爲雙向:

Mode = BindingMode.TwoWay 

WPF出於某些非顯而易見的原因,默認爲單向綁定。希望有所幫助。我並不是特別瞭解,但是我已經看到了與ObservableCollections簡單數據綁定的這個問題,並且TwoWay綁定修復了它。

1

我認爲使用第二個窗口作爲彈出窗口可能是這裏的問題。如果您在同一頁上進行編輯,則可以使用簡單的

ListView1.DataBind() 

刷新刪除命令結束時列表的內容。或者,您可以使用IsPostBack方法更新列表,如果頁面被重新繪製而不是重新加載。

您可以嘗試調用頁面名稱,然後從其他窗口調用列表視圖,但我不確定是否可以從另一個窗口執行此類命令。

或者,您可以在不同的頁面上進行編輯,而不是單獨的窗口,所以當您返回到原始頁面時,listview正在重繪。

像你自己一樣,我確信你的問題有一個更簡單的解決方案,但不幸的是我不知道它。