Được rồi, vì vậy tôi bị ám ảnh bởi câu hỏi này và đây là giải pháp cho khi sử dụng Hộp tìm kiếm. Tôi đã tải lên một mẫu đầy đủ trên MSDN và GitHub
Tóm lại, sử dụng SDK hành vi và InvokeCommand, sau đó sử dụng trình chuyển đổi để lấy bất kỳ dữ liệu nào bạn cần bằng cách sử dụng các thuộc tính mới InputConvert và InputConverterParameter.
XAML:
<SearchBox SearchHistoryEnabled="False" x:Name="SearchBox" Width="500" Height="50">
<SearchBox.Resources>
<local:SearchArgsConverter x:Name="ArgsConverter"/>
</SearchBox.Resources>
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="SuggestionsRequested">
<core:InvokeCommandAction
Command="{Binding SuggestionRequest}"
InputConverter="{StaticResource ArgsConverter}"
InputConverterLanguage="en-US"
InputConverterParameter="{Binding ElementName=SearchBox, Path=SearchHistoryEnabled}"/>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</SearchBox>
Chuyển đổi:
public sealed class SearchArgsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var args = (SearchBoxSuggestionsRequestedEventArgs)value;
var displayHistory = (bool)parameter;
if (args == null) return value;
ISuggestionQuery item = new SuggestionQuery(args.Request, args.QueryText)
{
DisplayHistory = displayHistory
};
return item;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return value;
}
}
Mainpade codebehind - tất nhiên bạn muốn điều này trong một VM :)
public sealed partial class MainPage
{
public DelegateCommand<string> Search { get; set; }
public DelegateCommand<ISuggestionQuery> SuggestionRequest { get; set; }
public MainPage()
{
InitializeComponent();
Search = new DelegateCommand<string>(SearchedFor, o => true);
SuggestionRequest = new DelegateCommand<ISuggestionQuery>(SuggestionRequestFor, o => true);
DataContext = this;
}
private void SuggestionRequestFor(ISuggestionQuery query)
{
IEnumerable<string> filteredQuery = _data
.Where(suggestion => suggestion.StartsWith(query.QueryText,
StringComparison.CurrentCultureIgnoreCase));
query.Request.SearchSuggestionCollection.AppendQuerySuggestions(filteredQuery);
}
private readonly string[] _data = { "Banana", "Apple", "Meat", "Ham" };
private void SearchedFor(string queryText)
{
}
}
Tôi đã viết lên một bước đi đầy đủ thông qua trên blog của tôi, nhưng ở trên là tất cả những gì bạn thực sự cần :)
Nguồn
2013-12-10 15:19:56
Im trên điện thoại của tôi bị bệnh thêm này như là một bình luận thay vì trả lời. Hãy xem EventToCommand trong MVVM Light. Đó là những gì tôi đã làm trong một tình huống tương tự. bị bệnh lấy máy tính của tôi và đặt cùng một ví dụ sau, nhưng trong trường hợp bạn đang ở trong một vội vàng này nên cung cấp cho bạn một khởi đầu. –
Bạn đã làm cho nó được sắp xếp? –