是否有事件要知道isEditable属性是否在DatagridTemplateColumn组合框中更改,以便在isEditable更改时重置selectedValue

时间:2020-05-21 21:45:38

标签: c# wpf combobox datagrid

我有一个带有可组合框的DatagridTemplateColumn。根据另一个属性值,这将是“文本”框或组合框。因此,如果Modelist为null,则isEditable将为true,使其更像一个文本框,并且如果列表已初始化,则isEditable将为false并带有下拉值。因此,随着用户编辑,SelectedModeValue会更新。

我的问题是,例如,当isEditable为false时,用户从下拉列表中选择一项,SelectedModeValue将具有该选定值,例如“ mode1”。现在,在更改其他属性(在下面的代码中说“ ModeType”)时,我的ModeList将变为null,并且由于没有列表,isEditable变为True。 TextBox可以正确显示,没有默认值,但是在SelectedModeValue后面仍具有值“ mode1”。需要将其重置为string.empty。因此,我想知道isEditable更改组合框上的值时是否有任何事件。如果可以的话,您可以通过该事件向我展示如何根据isEditable更改事件重置SelectedModeValue吗? 还是其他替代方式?

<DataGrid.Columns>
<DataGridTemplateColumn Header="ModeList">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <ComboBox ItemsSource="{Binding ModeList}" SelectionChanged="ValueChanged"
                                              Text="{Binding SelectedModeValue, Mode=TwoWay, UpdateSourceTrigger=LostFocus, ValidatesOnNotifyDataErrors=True, 
                                                ValidatesOnDataErrors=True,NotifyOnValidationError=True, ValidatesOnExceptions=True}">
                                        <ComboBox.Style>
                                            <Style TargetType="ComboBox">
                                                <Setter Property="IsEditable" Value="False"/>
                                                <Style.Triggers>
                                                    <DataTrigger Binding="{Binding ModeList}" Value="{x:Null}">
                                                        <Setter Property="IsEditable" Value="True" />
                                                    </DataTrigger>
                                                </Style.Triggers>
                                            </Style>
                                        </ComboBox.Style>
                                    </ComboBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
...<! other properties -->
</DataGrid.Columns>
public List<string> ModeList
        {
            get { return modeList; }
            set
            {
                modeList= value;

                OnPropertyChanged("ModeList");
            }
        }

public ModeTypeEnum ModeType
        {
            get { return modeType; }
            set
            {
                modeType = value;
                OnPropertyChanged("ModeType");
            }
        }

    public enum ModeTypeEnum  
    {
        slow= 0,
        Fast = 1,
        Forward = 2,
    }

1 个答案:

答案 0 :(得分:0)

您应该在数据对象的属性设置器中处理此问题:

public List<string> ModeList
{
    get { return modeList; }
    set
    {
        modeList = value;

        OnPropertyChanged("ModeList");

        if (modeList == null)
            SelectedModeValue = string.Empty:
    }
}

在视图中实现这种逻辑不是一个好主意,特别是如果您采用MVVM设计模式。