我有一个带有可组合框的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,
}
答案 0 :(得分:0)
您应该在数据对象的属性设置器中处理此问题:
public List<string> ModeList
{
get { return modeList; }
set
{
modeList = value;
OnPropertyChanged("ModeList");
if (modeList == null)
SelectedModeValue = string.Empty:
}
}
在视图中实现这种逻辑不是一个好主意,特别是如果您采用MVVM设计模式。