我有一个包含1000多个项目的listBox。
in xaml
<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>
IsSelected - 我的ViewModel的属性之一。转换器返回两种样式中的一种(如果选择了项目,则返回第一个,如果没有则返回第二个)
始终工作,但我知道 - 这是非常耗费资源的,也是错误的决定。 怎么做对了?
答案 0 :(得分:0)
这post帮助我! 只需覆盖我的ListBox的默认ItemContainerStyle。
我删除了:
metod OnSelectionChanged,UserControl MyCustomItem,样式转换器和
<ListBox.ItemTemplate>
<DataTemplate>
<controls:MyCustomItem/>
</DataTemplate>
</ListBox.ItemTemplate>
来自xaml。