2013-11-20 6 views
5

हम एक विंडोज 8.1 स्टोर ऐप लिख रहे हैं जो नए सर्चबॉक्स एक्सएएमएल नियंत्रण का उपयोग करता है। यह ड्रॉपडाउन सूची में सुझाव प्राप्त करने का एकमात्र तरीका दिखता है क्योंकि उपयोगकर्ता प्रकार SearchBoxSuggestionsRequestedEventArgs का उपयोग करना है और ईवेंट से SearchSuggestionCollection प्राप्त करें, फिर उसे सुझाव दें।विन 8.1 सर्चबॉक्स - बाध्यकारी सुझाव

हम WinRT के लिए प्रिज्म का उपयोग कर रहे हैं और सर्चबॉक्स और इसकी घटनाओं को व्यूमोडेल से अलग करना चाहते हैं जो सुझाव स्ट्रिंग्स की सूची प्राप्त कर रहा है।

मैं सर्चस्यूशन कोलेक्शन में स्ट्रिंग्स की सूची को बाध्य करने या प्रोग्रामिंग रूप से जोड़ने का कोई भी तरीका नहीं ढूंढ सकता, जिसमें ईवेंट तर्क का उपयोग शामिल नहीं है, जो इकाई परीक्षण को बहुत जटिल बना रहा है।

क्या सुझावों को बाध्य करने/जोड़ने का कोई तरीका है जिसमें ईवेंट तर्क शामिल नहीं है?

+0

मेरे फोन पर आईएम इतनी बीमार है कि इसे उत्तर के बजाय टिप्पणी के रूप में जोड़ें। एमवीवीएम लाइट में EventToCommand पर एक नज़र डालें। एक समान स्थिति में क्या किया है। बीमार मेरे कंप्यूटर को पकड़ो और बाद में एक उदाहरण डालें, लेकिन अगर आप जल्दी में हैं तो आपको शुरुआत शुरू करनी चाहिए। –

+0

क्या आपको इसे हल किया गया था? –

उत्तर

8

ठीक है, इसलिए मुझे इस प्रश्न से भ्रमित हो गया, और यहां सर्चबॉक्स का उपयोग करने के लिए एक समाधान है। मैं MSDN और GitHub

पर एक पूर्ण नमूना अपलोड कर दिया है संक्षेप में, व्यवहार एसडीके और और InvokeCommand उपयोग करते हैं, और फिर एक कनवर्टर का उपयोग हड़पने के लिए जो कुछ भी डेटा कि आपने नई विशेषताएं InputConvert और 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> 

कनवर्टर:

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 - निश्चित रूप से आप एक वी एम में यह चाहता हूँ :)

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) 
    { 
    } 
} 

मैं के माध्यम से पर एक पूर्ण की पैदल दूरी पर लिखा मेरा ब्लॉग, लेकिन उपरोक्त सभी की आपको वास्तव में आवश्यकता है :)

+0

उत्तर में मेरे ब्लॉग से लिंक नहीं करना चाहता था क्योंकि कुछ इसे पसंद नहीं करते हैं, लेकिन यहां चलना है: http://irisclasson.com/2013/12/10/passing-event-arguments-from- XAML-इन-windows-दुकान-क्षुधा-inputconverter-inputconverterparameter-etc / –