MVVM Light で AutoCompleteBox を使用する最善の方法を見つけようとしています。
public ICommand AutoComplete
{
get
{
return new RelayCommand<KeyEventArgs>(e =>
{
var txtBox = e.OriginalSource as TextBox;
if (e.Key == Key.Unknown)
{
return;
}
string autoComplete = txtBox.Text + e.Key;
if (autoComplete.Length >= 3)
{
RestClient c = new RestClient("http://localhost:3333/api/store");
RestRequest r = new RestRequest("/GetStoreNames",Method.GET);
r.AddParameter("Name", autoComplete);
r.AddParameter("Latitude", "49");
r.AddParameter("Longitude", "49");
var d = c.BuildUri(r);
c.ExecuteAsync(r, response2 =>
{
var content = response2.Content;
});
}
});
}
}
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyUp">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding AutoComplete, Mode=OneWay}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<toolkit:AutoCompleteBox x:Name="acbStore" Margin="154,196,29,0" VerticalAlignment="Top" RenderTransformOrigin="0.6,0.083" Height="162" MinimumPopulateDelay="500"/>
上記を行いましたが、いくつか問題があります。
結果を取得したら、オートコンプリート エリアに表示するにはどうすればよいですか?
一度に多くのリクエストを実行するのを遅らせるにはどうすればよいですか? ご覧のとおり、3 文字が入力される前にサーバーにヒットしたくありませんが、その後は公正なゲームです。最初のリクエストが戻ってくる前にサーバーに対して20回のリクエストが行われ、帯域幅が無駄になるのではないかと心配しています。