0

我有一个包含 1000 多个项目的列表框。

在xml中

<ListBox 
//some code here
SelectionChanged="OnSelectionChanged">
    <ListBox.ItemTemplate>
         <DataTemplate>
             <controls:MyCustomItem/>
         </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

在 cs

 private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var item = lb.SelectedItem as MyCustomItem;
        var vm = DataContext as ViewModel;
        if (vm == null) return;
        foreach (var it in vm.ItemsForBinding)
        {
            it.IsSelected = false;
        }
        item .IsSelected = true;
    }

在 MyCustomItem xaml

<UserControl
//Some code here
Style="{Binding Path=IsSelected, Converter = {StaticResource BoolToStyle}}">
    <Border 
    </Border>
</UserControl>

Where IsSelected - 我的 ViewModel 的属性之一。转换器返回两种样式中的一种(如果选择了第一个,第二个 - 如果没有)

总是工作,但我知道 - 它非常耗费资源,而且是错误的决定。怎么做才对?

4

1 回答 1

0

这个帖子帮帮我!只需覆盖我的 ListBox 的默认 ItemContainerStyle。

我删除了:

方法 OnSelectionChanged、UserControl MyCustomItem、样式转换器和

<ListBox.ItemTemplate>
     <DataTemplate>
         <controls:MyCustomItem/>
     </DataTemplate>
</ListBox.ItemTemplate>

来自 xml。

于 2013-04-03T08:08:15.113 回答