ListView项目默认选择列表中的第一项

时间:2010-07-31 22:31:25

标签: wpf

我有一个WPF ListView,我绑定了一个可观察的集合,下面是代码

         <ListView Name="WOListView" IsSynchronizedWithCurrentItem="True" 
                          DataContext="{Binding  AllItems}" 
                          ItemsSource="{Binding }"
                          SnapsToDevicePixels="True"   Grid.IsSharedSizeScope="True" 
                          customEvents:DoubleClickEvent.HandleDoubleClick="true"
                          customEvents:DoubleClickEvent.TheCommandToRun="{Binding Path=ItemCommand}" 
                          BorderThickness="0" >

这里我有两个问题

1)不知道为什么,我总是在加载列表时选择一个项目,并且它始终是我绑定的集合的第一个项目。

2)默认情况下,所选项目通常以蓝色显示,但是当我单击列表视图时,而不是取消选择项目。它将所选项目显示为灰色

1 个答案:

答案 0 :(得分:2)

For 1):这是由于IsSynchronizedWithCurrentItem =“True”。如果要使用IsSynchronizedWithCurrentItem功能,则可以想要影响CurrentItem。使用以下代码执行此操作...

var dv = CollectionViewSource.GetDefaultView(yourObservableCollection);
dv.MoveCurrentTo( /* here your desired selection */ );

...有关详细信息,请参阅here

For 2):这是ListView(和其他ListControls)的默认行为。如果列表控件不再具有焦点,则所选项目将显示为灰色。这样做是为了可视化哪个控件具有焦点(以及哪个控件没有)。

如果您想要无论如何更改选择行为,请将以下标记放入ListView

<ListView.Resources>
    <Style TargetType="ListViewItem">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Green"/>
        </Style.Resources>
    </Style>
</ListView.Resources>

根据需要更改颜色。但正如我所提到的,默认行为是向用户显示已选择哪个控件,如果您更改此行为,某些用户可能不喜欢...