2011-12-07 40 views
0

私は探しているものを見つけられませんでした。私はMVVM環境を持っています。ビューモデルでは、データベース接続/クエリのデータからデータテーブルを利用できます。私は "TheTable.DefaultView"に基づいて "DataView"としてプロパティ(getter/setter)を公開しました。WPFテキストボックスをデータグリッドの現在選択されている行にバインドします

私はデータビューにバインドするウィンドウにデータグリッドを持っています...問題はありません。上記の「のSelectedItem」については

<DataGrid AutoGenerateColumns="False" 
    Name="dataMyData" 
    ItemsSource="{Binding Path=ViewModelViewProperty, 
    NotifyOnSourceUpdated=True, 
    NotifyOnTargetUpdated=True}" 
    SelectedItem="{Binding Path=JustOneRecordInView, Mode=TwoWay}" 
    SelectionMode="Single" 
    SelectionUnit="FullRow" 
    GridLinesVisibility="Horizontal" 
    CanUserDeleteRows="False" 
    CanUserAddRows="False" > 

、それはあまりにもその(ゲッター/セッター)を経由してのViewModelに公開されたプロパティから来ています。

今、私の問題です。私がデータグリッド内のレコードのリストをスクロールすると、グリッドリストが提供するだけのデータよりも多くのデータを表示するための他のテキストボックスコントロールがあります。私は "現在の行"のデータを編集できるようにしたいので、私は考えることができる多くの設定でテキストボックスを持っていますが、何かがまだ間違っています。

<TextBox 
    Text="{Binding Path=PropertyForCurrentRecord[SpecificColumnInDataViewRow], 
     Mode=TwoWay, 
     UpdateSourceTrigger=PropertyChanged, 
     ValidatesOnDataErrors=True, 
     ValidatesOnExceptions=True, 
     BindsDirectlyToSource=True, 
     NotifyOnSourceUpdated=True, 
     NotifyOnTargetUpdated=True, 
     NotifyOnValidationError=True}" 
    Name="textBox1" VerticalAlignment="Top" Width="40" /> 

でも、私はスクロールして、データの編集モードで午前、そして現在の行に関連付けられているテキストボックスの値を変更し、この値がグリッドに表示されている列の1、データグリッドである場合変更された値は表示されません。ただし、同じレコードをスクロールして戻し続けても、テキストボックスの値は変更された値を表示します。

グリッドデータソースも、特定の行の個々の列が変更され、グリッド自体も更新されているように見えるようにするにはどうすればよいでしょうか。ありがとう...

答えて

0

WOW ...前の日からもっと掘り出した後、私はついにそれをクラックし、ここで私はそれを固定しました。私は明らかにしませんでした

private bool AcceptingTheChanges = false; 
private DataRowView myRecord; 
public DataRowView MyRecord 
{ 
    get { return myRecord; } 
    set { 
      if (myRecord != null) 
       myRecord.Row.Table.AcceptChanges(); 

      // Now, get the incoming value and re-store into private 
      myRecord = value; 
      // Finally, raise event that it changed to refresh window... 
      RaisePropertyChanged("MyRecord"); 
     } 
} 
0

あなたのDataGridは、SomeType型のいくつかの要素のコレクションにバインドされています。タスクを作成するには、SomeTypeにINotifyPropertyChangedを実装する必要があります(またはViewModelBaseから継承する必要があります)。ここで良いサンプルを見ることができます:http://www.hightech.ir/SeeSharp/best-implementation-of-inotifypropertychange-ever

+0

申し訳ありませんが、私は「行選択」の変化が...しかし、データグリッドが更新されているdataviewrowのコンテンツを提示すべきではないINotifyPropertyChangedの実装を持っています... – DRapp

関連する問題