2010-07-31 58 views
2

我有一个WPF的ListView,我在那里绑定可观察到的集合,并在下面的第一个项目选择即将默认是代码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)选择的项目通常显示出蓝色默认,但当我点击出侧的列表视图,而不是取消选择item.it示出了在颜色公司名片项作为灰

回答

2

对于1) :这是由于IsSynchronizedWithCurrentItem =“True”。如果你想使用IsSynchronizedWithCurrentItem-feature,你可以想要影响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> 

改变颜色,如你所愿。但正如我所提到的,默认行为是向用户显示哪个控件已被选中,如果你改变了这种行为,一些用户可能不喜欢...

+0

@HCL第一个解决方案对我来说真的很棒,谢谢。 是否有任何获得第二个。 – crazy9 2010-08-01 13:42:54

+0

@ crazy9,看到我的更新 – HCL 2010-08-04 07:59:51

+0

oo亚为我工作的第二个问题。谢谢代码,但对于第一个问题,如果我删除 Issyndronisewithcurrentitem = true,这不是更新列表,这是后来做..和许多以前工作的功能......停止工作 – crazy9 2010-08-05 03:19:13