我有一個非常平坦的行爲。我在View中有一個ListBox,其中的項目包括ViewModels,並有一個DataTemplate。我將IsSelected綁定到我的ViewModel並使用SelectionMode =「Extended」。一切正常。 但如果我添加VirtualiuationMode =「回收」我得到錯誤的項目。 重現:使用Ctrl選擇項目,然後向下滾動並選擇一個項目。正常的行爲取消選擇所有項目,只需選擇最後一個沒有Holled Ctrl。 但是,如果我檢查我的ViewModel所有的舊項目被選中!?!ListBox中的選擇錯誤,VirtualizationMode =「Recycling」和SeclectionMode =「Extended」?
<Grid>
<StackPanel>
<ListBox ItemsSource="{Binding People}" MaxHeight="100"
SelectionMode="Extended"
VirtualizationMode="Recycling">
<!--VirtualizingStackPanel.IsVirtualizing="True">-->
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<views:PeopleView />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Click="Button_Click">
OK
</Button>
</StackPanel>
</Grid>
的項目模板
<UserControl x:Class="WpfApplication1.View.PeopleView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="Auto" Width="Auto">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="A"/>
<ColumnDefinition Width="Auto" SharedSizeGroup="B"/>
</Grid.ColumnDefinitions>
<TextBox Text="{Binding Path=Name}"
Name="tbx_Name"
Grid.Column="0"/>
<CheckBox IsChecked="{Binding Path=IstAktiv}"
Name="cbx_IstAktiv"
Grid.Column="1"/>
</Grid>
任何想法?
小錯誤代碼: VirtualizingStackPanel.VirtualizationMode =「回收」 但我仍然有問題... – KCT 2010-05-31 06:41:51