首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF DataGridComboBoxColum -用于选择值的触发器

WPF DataGridComboBoxColum -用于选择值的触发器
EN

Stack Overflow用户
提问于 2022-02-21 16:07:58
回答 1查看 53关注 0票数 1

我有一个有几个字段的DataGrid,其中一个是DataGridComboBoxColumn。在这种情况下,我会根据默认的"Add“字段动态添加项。如果我已经添加了Item 1并目前已被选中,我希望当用户单击下拉列表并再次选择Item 1时,我可以触发我的源代码并编辑该项目。但是,目前使用UpdateSourceTrigger=PropertyChanged不会触发任何更改。

看起来,UpdateSourceTrigger=Explicit是我所需要的,但我不知道如何实现UpdateSource()方法来实现我想做的事情。

我的xaml片段

代码语言:javascript
运行
复制
            <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,所以这也是一个需要考虑的因素。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-22 16:29:17

只有在选择新值时才设置SelectedValueBinding源属性。

如果您想在当前选定的值再次被选中时执行某些操作,可以在视图中处理此操作,例如处理DropDownOpenedDropDownClosed事件:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
<DataGridComboBoxColumn.EditingElementStyle>
    <Style TargetType="ComboBox">
        <Setter Property="ItemsSource" Value="{Binding Items, UpdateSourceTrigger=PropertyChanged}" />
        <EventSetter Event="Loaded" Handler="ComboBox_Loaded" />
    </Style>
</DataGridComboBoxColumn.EditingElementStyle>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71209495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档