如何在Windows Store 8.1 MVVM应用程序中添加命令行为

时间:2014-05-05 08:19:45

标签: mvvm command mvvm-light windows-8.1 windows-phone-8.1

我想在新的Windows Phone 8.1 AutoCompleteBox Control的TextChange事件上调用一个命令。我正在使用MVVM Light。

2 个答案:

答案 0 :(得分:18)

在新的Windows应用商店8.1应用中,有一个新的SDK Behavior SDK用于在应用中添加行为。默认情况下不添加它您必须在项目中添加此扩展。以下是如何在项目中添加此扩展程序。

enter image description here

从列表中安装Behavior SDK。 enter image description here

现在,在您的XAML页面中,将以下命名空间添加到能够在ViewModel上调用ICommand的InvokeActionCommand

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

...

这是用于在autocompletebox的textchange事件上调用命令的代码XAML代码。

<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>

以下是我在ViewModel中的RelayCommand

 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;

                                      }));
        }
    }

希望这有助于细节,请参阅以下链接。 Windows 8.1 Behavior SDK: How to use InvokeAction

答案 1 :(得分:5)

标记的答案肯定是正确的,它帮助我发现了行为SDK;但是,Behavior SDK似乎已经在VS 2015 CTP中本地安装,而不是作为扩展。此外,要使Universal应用程序使用Behavior SDK,您必须:

  1. 右键单击项目的引用文件夹,然后选择添加引用... 参考管理器对话框将打开。
  2. 选择左侧的 Windows Phone 8.1 标签或 Windows 8.1 标签,具体取决于您要更新的项目类型。
  3. 选择扩展程序子标签。
  4. 在右侧,选中行为SDK(XAML)
  5. 在通用项目的解决方案中, Shared 项目可以像使用任何其他项目一样使用Behavior SDK;但是,它没有任何引用文件夹,因此您只需使用前面的步骤添加对所有目标平台项目的引用;例如,您的 .Windows .WindowsPhone 项目。
  6. 您必须定义的XAML名称空间仍然相同:

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