簡単なテスト(WPF-MVVM)クライアント(WCF oDataサービス用)アプリがあります:
ViewModel
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}" />
2つの質問があります:
- ListBoxスライダーの動きがS_O___M_U_C_Hの速度を低下させるのはなぜですか(コレクションには40のクライアントしかありません)。
なぜ、これを変更すると
Collection = new CollectionView(context.Clients);
これに
Collection = new CollectionView(context.Clients.ToArray());
したがって、IEnumerableシェルを介してコンテキストとの「接続」を切断するには(UIパフォーマンスの問題に役立ちます)-フィルタリングの動作を停止します!コレクションをデータコンテキストから切断するとフィルタリングが損なわれる理由がわかりません...
それで、私の最後の質問は、GUIのパフォーマンスの問題を回避し、同時にフィルタリングを実装することは可能ですか?もしそうなら、どのように?
どんな提案でも大歓迎です!