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

11

我希望在新的Windows Phone 8.1自动完成框控件的TextChange事件中调用一个命令。我正在使用MVVM Light框架。


你能在Windows 8.1和Windows Phone 8.1中使用AutoCompleteBox吗?我的Visual Studio无法在Windows 8.1中使用它,因为AutoCompleteBox被定义为针对Windows Phone 8.1。你是如何解决这个问题的? - WereWolfBoy
2个回答

18

在新的Windows 8.1应用商店中,有一个新的SDK 行为SDK,可以在应用程序中添加行为。它不会默认添加到项目中,您需要将此扩展添加到项目中。以下是如何将此扩展添加到您的项目中:

enter image description here

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

现在,在您的XAML页面中,向 InvokeActionCommand 添加以下命名空间,以便调用 ViewModel 上的 ICommand。

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

以下是在自动完成框的文本更改事件上调用命令的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 行为 SDK:如何使用 InvokeAction


我想知道为什么你需要在这里使用一个命令。 你可以在SearchText的Set方法中更新ItemSource,不是吗? - timr
1
@Kajzer 如果您没有使用MVVM Light,那么只需在Windows Phone 8.1 Rt移动应用程序中添加一个新的视图类型(基本页面)。Visual Studio 2013会自动将RelayCommand添加到您的项目中。 - Muhammad Saifullah

5
被标记的答案肯定是正确的,它帮助我发现了行为 SDK;然而,行为 SDK 似乎已经原生安装在 VS 2015 CTP 中,而不是作为一个扩展程序。此外,为了让通用应用程序使用 Behavior SDK,您必须执行以下操作:
  1. 右键单击项目的“引用”文件夹,选择“添加引用……”。 引用管理器对话框会打开。
  2. 在左侧选择“Windows Phone 8.1”选项卡或“Windows 8.1”选项卡,具体取决于您要更新的项目类型。
  3. 选择“扩展”子选项卡。
  4. 在右侧选中“Behavior SDK (XAML)”。
  5. 在通用项目的解决方案中,“共享”项目可以像其他项目一样使用行为 SDK。但是,它没有任何“引用”文件夹,因此您必须按照上述步骤将引用添加到所有目标平台项目中 。例如,您的“.Windows”和“.WindowsPhone”项目。

您必须定义的 XAML 命名空间仍然是相同的:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接