我有简单的测试(WPF - MVVM)客户端(用于 WCF oData 服务)应用程序:
视图模型
public class MainViewModel : ViewModelBase
{
private MyEntities context;
public ICollectionView Collection { get; private set; }
private string searchString = "";
public string SearchString
{
get { return searchString; }
set
{
searchString = value;
Collection.Refresh();
}
}
public MainViewModel()
{
context = new MyEntities(new Uri("http://localhost:3780/Live.svc"));
Collection = new CollectionView(context.Clients);
//Collection = new CollectionView(context.Clients.ToArray());
Collection.Filter = (o) => (o as Client).FullName.ToString().StartsWith(SearchString);
}
}
和查看
<ListBox ItemsSource="{Binding Collection}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FullName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBox Grid.Row="1" Text="{Binding SearchString, UpdateSourceTrigger=PropertyChanged}" />
我有两个问题:
- 为什么 ListBox 滑块的移动会减慢 S_O___M_U_C_H(我的集合中只有 40 个客户端)?
为什么,如果我改变这个
Collection = new CollectionView(context.Clients);
对此
Collection = new CollectionView(context.Clients.ToArray());
所以要通过 IEnumerable shell 断开与上下文的“连接”(它有助于解决 UI 性能问题) - 停止工作过滤!我不明白为什么从数据上下文中断开集合会损坏过滤...
所以,我的最后一个问题是 - 是否有可能避免 GUI 性能问题并同时实现过滤?如果是这样,怎么办?
欢迎任何建议!