我有一个有几个字段的DataGrid,其中一个是DataGridComboBoxColumn。在这种情况下,我会根据默认的"Add“字段动态添加项。如果我已经添加了Item 1
并目前已被选中,我希望当用户单击下拉列表并再次选择Item 1
时,我可以触发我的源代码并编辑该项目。但是,目前使用UpdateSourceTrigger=PropertyChanged
不会触发任何更改。
看起来,UpdateSourceTrigger=Explicit
是我所需要的,但我不知道如何实现UpdateSource()方法来实现我想做的事情。
我的xaml片段
<DataGridComboBoxColumn x:Name="ItemColumn" Header="{x:Static res:RES.HEADER}"
ToolTipService.ToolTip="{x:Static res:RES.TOOLTIP}"
SelectedValueBinding="{Binding Path=Item, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}" >
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox" BasedOn="{StaticResource DataGridComboBoxElementStyle}">
<Setter Property="ItemsSource" Value="{Binding Items, UpdateSourceTrigger=PropertyChanged}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox" BasedOn="{StaticResource DataGridComboBoxEditingElementStyle}">
<Setter Property="ItemsSource" Value="{Binding Items, UpdateSourceTrigger=PropertyChanged}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
我获得了string
项和List<string>
项属性来绑定字段。
是否有可能得到一个例子,说明如何使用显式在每次用户单击项目下拉列表时获得触发器,即使已经选中了该选项?或者有没有其他方法不使用显式?我正在尽可能多地使用MVVM,所以这也是一个需要考虑的因素。
发布于 2022-02-22 16:29:17
只有在选择新值时才设置SelectedValueBinding
源属性。
如果您想在当前选定的值再次被选中时执行某些操作,可以在视图中处理此操作,例如处理DropDownOpened
和DropDownClosed
事件:
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
ComboBox cmb = (ComboBox)sender;
cmb.DropDownOpened += Cmb_DropDownOpened;
cmb.DropDownClosed += Cmb_DropDownClosed;
}
string _selectedValue;
private void Cmb_DropDownOpened(object sender, EventArgs e)
{
_selectedValue = ((ComboBox)sender).SelectedItem as string;
}
private void Cmb_DropDownClosed(object sender, EventArgs e)
{
string selectedValue = ((ComboBox)sender).SelectedItem as string;
if (selectedValue == _selectedValue)
{
//same value was selected...
}
}
XAML:
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Items, UpdateSourceTrigger=PropertyChanged}" />
<EventSetter Event="Loaded" Handler="ComboBox_Loaded" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
https://stackoverflow.com/questions/71209495
复制相似问题