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

Posted

技术标签:

【中文标题】如何在 windows store 8.1 MVVM 应用程序中添加命令行为【英文标题】:How to add Command Behavior in windows store 8.1 MVVM application 【发布时间】:2014-06-21 11:39:14 【问题描述】:

我想在新的 windows phone 8.1 AutoCompleteBox 控件的 TextChange 事件上调用命令。我正在使用 MVVM Light。

【问题讨论】:

那么您可以在 Windows 8.1 和 Windows Phone 8.1 中使用 AutoCompleteBox 了吗?我的 Visual Studio 不允许我在 Windows 8.1 中使用它,因为 AutoCompleteBox 被定义为面向 Windows Phone 8.1。你是怎么解决这个问题的? 【参考方案1】:

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

从列表中安装 Behavior SDK。

现在在您的 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"

...

这里是代码 XAML 代码,用于在自动完成框的 textchange 事件上调用命令。

<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

【讨论】:

我想知道你为什么需要一个命令。您可以在 SearchText 的 Set 方法中更新 itemsource。没有? @Kajzer 如果您没有使用 MVVM 灯,只需在您的 windows phone 8.1 Rt 移动应用程序中添加一个新的视图类型(基本页面)。 Visual Studio 2013 会自动在你的项目中添加 RelayCommand【参考方案2】:

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

    用鼠标右键单击项目的 References 文件夹,然后选择 Add Reference...参考管理器对话框打开。 选择左侧的 Windows Phone 8.1 标签或 Windows 8.1 标签,具体取决于您要更新的项目类型。 选择扩展程序子标签。 在右侧,选中 Behavior SDK (XAML)。 在通用项目的解决方案中,Shared 项目可以像任何其他项目一样使用 Behavior SDK;但是,它没有任何 References 文件夹,因此您必须简单地添加对所有目标平台项目的引用,而不是使用前面的步骤;例如,您的 .Windows.WindowsPhone 项目。

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

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

【讨论】:

以上是关于如何在 windows store 8.1 MVVM 应用程序中添加命令行为的主要内容,如果未能解决你的问题,请参考以下文章

Windows Store的Windows 8.1紧急应用程序是否可行?

在Windows Phone 8.1模拟器上从Store安装应用程序时出现错误80070002

Windows Store Metro APP如何适配屏幕大小

我需要简单的例子来在数据网格中使用组合框(MVV

从 Windows Store App 中的 WebView 捕获到自定义协议的导航

如何将 Windows 商店中的 Windows Phone 应用程序(8.1 XAML)迁移到 8.1 Silverlight?