2017-01-30 5 views
0

以前は、DataGridに変換しようとしているObservableCollectionオブザーバブルオブジェクトのプロパティを表示していました。私はそのほとんどが働いていますが、現在ComboBoxで表されている特定のプロパティ(Status)の変更を見ていくつかの問題があります。アイデアは、 "Alive、Dead、Poisoned"などのようなものを表すenumのセットの間で "Status"値をオーバーライドできるようにすることです。ComboBoxが閉じられ、そのハンドラ内でEventHandlerを接続しました。送信者オブジェクトをPlayerとして取得して、有効なプレーヤーの値を送信することができます。DropTownClosedイベントハンドラからDataGrid内のComboBox DataTemplateから現在選択されているアイテムを取得しようとしています

ここでは、DataTemplateを使用してComboBoxを作成するXAMLのスニペットを示します。イベントハンドラ内

<DataGridTemplateColumn Header="Status"> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ComboBox Name="cbStatus" 
         ItemsSource={Binding Source={StaticResource statusTypes}}" 
         SelecteItem="{Binding statusType, Mode=TwoWay}" 
         DropDownClosed="cbStatusType_DropDownClosed"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 

は、私はGUIの特定の行から戻ってきた値をもとに、「プレーヤー」のオブジェクトを試みるとつかむために、以下の使用しています。コンボボックスが閉じ、新しい値が選択されたときに、私は新しいplayerOverriddenをデバッグしていたときに

Player playerOverridden = (Player)(sender as FrameworkElement).DataContext; 

しかし、私はplayerOverriddenで捕獲され、その値が表示されません。

これは、GridViewColumn.CellTemplatesを使用してListViewで行っていた作業とほぼ同じですが、うまくいきました。ステータス値が、コンボボックスからプレーヤーが選択したものではなく、最初に設定されたものに戻っている理由がわかりません。

答えて

0

UpdateSourceTriggerPropertyChangedに設定しなければならなかった。これがListViewで行う必要のないDataGrid内で明示的に設定する必要があるかどうかはわかりません。

SelectedItem={"Binding statusType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
関連する問題