我有这样的设置:
ViewModel代码段:
private ObservableCollection<Field> _Fields;
public ObservableCollection<Field> Fields
{
get
{
return _Fields;
}
set
{
NotifyPropertyChanged(ref _Fields, value, "Fields");
}
}
private Field _SelectedField;
public Field SelectedField
{
get
{
return _SelectedField;
}
set
{
NotifyPropertyChanged(ref _SelectedField, value, "SelectedField");
}
}
XAML:
<ListBox x:Name="FieldList" ItemsSource="{Binding Fields}" SelectedValue="{Binding SelectedField}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我经常更新字段集合,如下所示:
List<Field> myFieldList = myDataSource.GetFields();
Fields = new ObservableCollection<Field>(myFieldList);
当我这样做时,列表框会自动默认选择第一个项目。我希望默认情况下不选择任何内容(例如SelectedIndex = -1
或SelectedValue = null
)。我怎样才能做到这一点?
答案 0 :(得分:1)
我尝试了但无法重现它。 如果您已在VM中安装了SelectedField,请在更新Fields后立即将其设置为null。
你也可以尝试使用Action / Trigger将SelectedIndex设置为-1,就像这样
<ListBox x:Name="FieldList" ItemsSource="{Binding Fields}" SelectedValue="{Binding SelectedField}">
<i:Interaction.Triggers>
<ei:PropertyChangedTrigger Binding="{Binding Fields}">
<ei:ChangePropertyAction TargetObject="{Binding ElementName=FieldList}" PropertyName="SelectedIndex" Value="-1"/>
</ei:PropertyChangedTrigger>
</i:Interaction.Triggers>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但实际上这不是重置选择的最佳方式。