2014-05-05 7 views
11

Ich möchte einen Befehl auf TextChange-Ereignis des neuen Windows Phone 8.1 AutoCompleteBox-Steuerelement aufrufen. Ich benutze MVVM Light.So fügen Sie Befehlsverhalten in Windows Store 8.1 MVVM-Anwendung

+0

So können Sie die AutoCompleteBox in Windows 8.1 und Windows Phone 8.1 benutzen? Mein Visual Studio lässt mich nicht in Windows 8 verwenden.1, weil die AutoCompleteBox als auf Windows Phone 8.1 ausgerichtet definiert ist. Wie bist du dazu gekommen? – WereWolfBoy

Antwort

18

In neuen Windows Store 8.1-Anwendungen gibt es ein neues SDK Behavior SDK zum Hinzufügen von Verhaltensweisen in der Anwendung. Es ist nicht standardmäßig hinzugefügt Sie müssen diese Erweiterung in Ihrem Projekt hinzufügen. Im Folgenden erfahren Sie, wie Sie diese Erweiterung in Ihrem Projekt hinzufügen.

enter image description here

das Verhalten SDK aus der Liste installieren. enter image description here

Jetzt in Ihrem XAML Seite hinzufügen Namespaces folgenden InvokeActionCommand dass der Aufruf ICommand auf Ansichtsmodell fähig ist

xmlns:i="using:Microsoft.Xaml.Interactivity" 
    xmlns:core="using:Microsoft.Xaml.Interactions.Core" 
    DataContext="{Binding AutoSuggestionBoxExample, Mode=OneWay, Source={StaticResource  Locator}}" 

...

hier ist der Code XAML-Code für auf Textchange Ereignis Befehl aufrufen der Autocomplete-Box.

<AutoSuggestBox Text="{Binding SearchText,Mode=TwoWay}" ItemsSource="{Binding       
Suggesstions}"> 
     <AutoSuggestBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding}"/> 
      </DataTemplate> 
     </AutoSuggestBox.ItemTemplate> 
     <i:Interaction.Behaviors> 
      <core:EventTriggerBehavior EventName="TextChanged"> 
       <core:InvokeCommandAction Command="{Binding SearchChanged}">                  
     </core:InvokeCommandAction> 
      </core:EventTriggerBehavior> 
     </i:Interaction.Behaviors> 
    </AutoSuggestBox> 

Es folgt mein RelayCommand in Ansichtsmodell

private RelayCommand _searchChanged; 

    /// <summary> 
    /// Gets the SearchChanged. 
    /// </summary> 
    public RelayCommand SearchChanged 
    { 
     get 
     { 
      return _searchChanged 
       ?? (_searchChanged = new RelayCommand(
            () => 
             { 
              IList<string> sugg = new List<string>(); 
              for (int i = 0; i < 25; i++) 
              { 
               sugg.Add(SearchText + " 1" + i); 
               sugg.Add(SearchText + " 2" + i); 
              } 
              Suggesstions = sugg; 

             })); 
     } 
    } 

Hope this für Detail sehen Sie auf den folgenden Link hilft. Windows 8.1 Behavior SDK: How to use InvokeAction

+0

Ich frage mich, warum Sie hier einen Befehl brauchen würden. Sie konnten die itemsource in der Set-Methode von SearchText aktualisieren. Nein? – tim

+0

RelayCommand nicht gefunden. Irgendwelche Tipps? – Kajzer

+1

@Kajzer Wenn Sie nicht MVVM Licht als verwenden, fügen Sie einfach eine neue Ansicht des Typs (Basic-Seite) in Ihrem Windows Phone 8.1 Rt Mobile-Anwendung. Visual Studio 2013 fügt RelayCommand automatisch in Ihr Projekt ein –

5

Die markierte Antwort ist sicherlich richtig und es hat mir geholfen, das Behavior SDK zu entdecken; Das Verhalten SDK scheint jedoch bereits in CTP von VS 2015 nativ installiert zu sein, anstatt eine Erweiterung zu sein. Darüber hinaus für einen Universal-App das Verhalten SDK verwenden müssen Sie:

  1. rechte Maus Referenzen Ordner Ihres Projektes klicken und wählen Sie Verweis hinzufügen .... Der Dialog Referenzmanager wird geöffnet.
  2. Wählen Sie die Registerkarte Windows Phone 8.1 oder die Registerkarte Windows 8.1 auf der linken Seite, je nachdem, welche Art von Projekt Sie aktualisieren. Wählen Sie Extensions Sub-Registerkarte.
  3. Auf der rechten Seite überprüfen Verhalten SDK (XAML).
  4. In einer Lösung für ein universelles Projekt kann das gemeinsame Projekt das Verhalten SDK wie jedes andere Projekt verwenden; Es enthält jedoch keine Verweise Ordner, so dass Sie einfach den Verweis auf alle Zielplattformprojekte hinzufügen müssen, statt die vorherigen Schritte zu verwenden; z. B. Ihre .Windows und .WindowsPhone Projekte.

Der XAML-Namespaces, die Sie müssen die gleiche ist noch definieren:

<UserControl ... 
      xmlns:i="using:Microsoft.Xaml.Interactivity" 
      xmlns:core="using:Microsoft.Xaml.Interactions.Core" 
      ...>