我之前有一个ListView,它显示了一个“Player”对象属性的ObservableCollection,我试图将其转换为DataGrid。我有大部分工作,但目前在一个特定属性(状态)上看到更改有一些问题,由ComboBox表示。我们的想法是允许玩家覆盖一组表示“活着,死亡,中毒”等内容的枚举之间的“状态”值。我已经连接了一个EventHandler,当ComboBox关闭时,在该处理程序内,尝试将Player对象作为播放器抓取,这样我就可以发出有效的播放器值。
这是XAML的一个片段,我正在通过DataTemplate创建ComboBox。
<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的特定行返回的值来获取“Player”对象。
Player playerOverridden = (Player)(sender as FrameworkElement).DataContext;
但是,当我在ComboBox关闭并且选择了新值时调试新的playerOverridden时,我没有看到在playerOverridden中捕获该值。
这几乎就是我在使用GridViewColumn.CellTemplates的ListView中所做的,它工作得很好。不确定为什么Status值会像最初设置的那样返回,而不是玩家从ComboBox中选择的值。
答案 0 :(得分:0)
必须将UpdateSourceTrigger
上的SelectedItemBinding
设置为PropertyChanged
,它才有效。不知道为什么必须在DataGrid中明确设置它,而不是我需要在ListView中做的事情。
SelectedItem={"Binding statusType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"