绑定更改时,阻止列表框自动选择第一个项目

时间:2014-04-09 19:35:55

标签: c# wpf xaml listbox

我有这样的设置:

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 = -1SelectedValue = null)。我怎样才能做到这一点?

1 个答案:

答案 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>

但实际上这不是重置选择的最佳方式。