【发布时间】:2015-06-26 21:48:20
【问题描述】:
我有一个线程每秒更新当前的Mode 属性。我还想要一个能够在数据网格的同一单元格中设置模式的选项。因此,在 not 编辑模式下,我只显示该模式。在编辑模式下,我显示了一个填充的ComboBox。
现在,
- 为了能够在
ComboBox中显示所选项目,当我进入编辑模式时,我将SelectedItem绑定到Mode。 - 为了能够将更改返回到 ViewModel,我将
SelectedValue绑定到不同的属性。 (我需要绑定到不同的属性,因为“模式”每秒更新一次,并且会覆盖选定的值)。
问题在于,虽然SelectedItem 与Mode=OneTime 绑定,但它仍然会触发SelectedValue 属性。我希望 SelectedValue 仅在用户选择一个值时触发。
我希望很清楚我想要做什么。那么,我该如何实现呢?欢迎使用其他方法(即使我需要使用不同的控件)。
<DataGridTemplateColumn Header="Mode">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Mode}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource Modes}}"
SelectedItem="{Binding Mode, Mode=OneTime}"
SelectedValue="{Binding ModeToSet, Mode=OneWayToSource}"
/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
【问题讨论】:
-
至少对我来说还不清楚为什么
StatusToSet必须保持(空)直到实际用户选择?为什么不将选择推送到另一个属性当SelectionChange事件发生时?因为StatusToSet有不需要的中间值? -
@OmegaMan,应该是
ModeToSet(我已经更新了)。当您在CellEditingTemplate中执行SelectedItem="{Binding Mode}"时,它会更新源。我不想在你刚进入编辑模式时更新它。