我將500個奇怪刻痕的列表綁定到一個列表,每列列有一個狀態圖像。滾動列表的速度非常緩慢,在不同列表的標籤之間也是如此。有沒有辦法讓這個圖像綁定更高性能?
這些都是我最近在添加這些圖片時發生的變化引起的。
有沒有辦法加快速度?
我的位圖(非常小的16 * 16):
<BitmapImage x:Key="ActiveIcon" UriSource="/WPFClient;component/Images/active.png" />
<BitmapImage x:Key="IdleIcon" UriSource="/WPFClient;component/Images/idle.png" />
<BitmapImage x:Key="AwayIcon" UriSource="/WPFClient;component/Images/away.png" />
<BitmapImage x:Key="UnknownIcon" UriSource="/WPFClient;component/Images/unknown.png" />
我的列表:
<ListBox ItemsSource="{Binding Users}">
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel>
<Image Source="{Binding Status, Converter={StaticResource UserStatusToIconConverter}}" Height="16" Width="16" Margin="0,0,5,0" />
<TextBlock Text="{Binding Nick}" />
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我的轉換器:
public class UserStatusToIconConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string userStatus = value.ToString();
string iconName = "UnknownIcon";
switch (userStatus)
{
case "Active":
iconName = "ActiveIcon";
break;
case "Idle":
iconName = "IdleIcon";
break;
case "Away":
iconName = "AwayIcon";
break;
}
return iconName;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
注意:代碼也不能像目前的那樣工作,實際上沒有圖像顯示。不過,我認爲這是一個小地方的細節。
發佈您的完整XAML。聽起來好像你讓ListBox失去了默認的虛擬化。你是否將任何模板應用於ListBox? –
順便說一句,它不是一個小細節。你正在做一個錯誤的綁定,這會導致很多異常(你可以在輸出窗口中看到這些)。這是性能下降的另一個可能原因。 –
@HighCore你是對的。我會修復它並更新帖子。 – sprocket12