2012-12-26 3 views
6

を削除した後更新されない、のDataTableにバインド:XAMLでListViewコントロールだから基本を行

mainGrid.SetBinding(Grid.DataContextProperty, 
    new Binding() { 
     Source = new DataView() 
      { Table = SQLHandler.GetHandler[classType.ToString()] } 
    } 
); 

私はグリッドのDataContextのが移入され、その上にListViewコントロールを持つウィンドウを、持っています
<ListView Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" ItemsSource="{Binding}"> 

すべて正常に機能し、入力されます。上記のように、私はSingletonからアクセスできるSQLHandlerクラスを持っており、インデクサーでテーブルにアクセスできます。

問題は:ウィンドウが読み込まれ、私は行を選択しています、編集ボタンをクリックすると、新しいウィンドウがロードされ、選択された行の詳細が表示されます。この新しいウィンドウを介してこの行を削除して閉じると、メインウィンドウ(完全なデータテーブルが表示されます)はそれに応じて更新されません。私は解決策が何であるべきかを知っていますが、私はそれを機能させることはできません。 (InotifypoppertyはSqlHandlerクラス、Binding.IndexerNameなどにインターフェイスを変更しました)

ここが主なものです。私のSqlHandlerクラスにはデータセットがありません.SqlExecuterには、すべてのsqlコマンドが実行されています。

public DataSet GetDataSet 
{ 
    get { return ds; } 
} 

どのように私はこの作業を行うことができます。GetDataSetがある

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"); 
    } 
} 

?別のウィンドウで行を削除してその行を閉じると、メインウィンドウのリストビューは更新されません。 私が持っている唯一のオプションは、リフレッシュボタンを押してから、datacontextプロパティを再バインドして、もちろん動作しますが、私の目標は結局バインディングのための 'ライブ'アップデートシステムを持つことです。

私が試したこと:SqlExecuterのGetDataSet:inotifypropertychangedインターフェイスを実装しましたが、何も変更されませんでした。私はsetterを持たないため、SqlHandlerのインデクサーでinotifypropertychangedを実装することはできません。私は常にコードビハインドからテーブルにアクセスしています。私のsqldataadapterはそれらを読み込んでいます(Fillメソッド)

ps私は実際にObservableCollectionを作成する予定はありません。コードの90%を書き直す必要があります。行を削除すると、データセットをクリアして再度入力するので、すべての変更に気づくことさえ期待できません私は私のデータテーブルを補充するとき、ちょうど、私のリストビューは...それについて知っていると

答えて

0

次の2つの方法への結合モードを設定する必要があるかもしれません自分自身をリフレッシュする必要があります。

Mode = BindingMode.TwoWay 

WPFは明白ではありません。片方向のバインディングにデフォルト設定されています。希望が役立ちます。私は特に十分な情報はありませんが、ObservableCollectionsへの単純なデータバインディングでこの問題を確認しており、TwoWayバインディングで修正されています。

1

ポップアップとして2番目のウィンドウを使用すると問題が発生する可能性があります。あなたが同じページ上で編集をしていたなら、あなたは削除コマンドの末尾にリストの内容を更新するには、単純な

ListView1.DataBind() 

を使用することができます。または、ページが再読み込みではなく再描画された場合、IsPostBackメソッドを使用してリストを更新することができます。

他のウィンドウからページ名とリストビューを呼び出すこともできますが、別のウィンドウからそのようなコマンドを実行できるかどうかはわかりません。

別のウィンドウではなく、別のページで編集を行うことができます。元のページに戻ったときにリストビューが再描画されます。

あなた自身と同じように、あなたの問題に対するより単純な解決策があると確信していますが、残念ながら私はそれを知らないのです。

関連する問題