UWP运行查询作为输入-MVVM

时间:2018-12-17 15:03:39

标签: c# xaml mvvm uwp event-handling

我正在为我所在的公司创建UWP应用,其中一项要求是在键入时运行搜索查询。我已经成功地做到了,但是我打破了MVVM模型来做到这一点。这是我当前的代码,如果有办法使它对MVVM更加友好,并为其他示例提供帮助,那就太好了。

查看:

<TextBox x:Name="SearchTxtBx" PlaceholderText="Search..." Visibility="Collapsed" Text="{x:Bind ViewModel.SearchValue, Mode=TwoWay}" Grid.Row="6" Grid.ColumnSpan="2" KeyUp="SearchTxtBx_KeyUp" />

代码提示:

 private void SearchTxtBx_KeyUp(object sender, KeyRoutedEventArgs e)
    {
        if ((bool)FNSearchOpt.IsChecked || (bool)LNSearchOpt.IsChecked)
        {
            var testText = SearchTxtBx.Text;

            ViewModel.GetSearchResults(testText);
        }

    }

VIEWMODEL:

 public void GetSearchResults(string typedText = "")
    {
        string queryString = "";

        if((FNSearchCheck || LNSearchCheck) && !typedText.isNullOrWhiteSpace())
        {
            SearchValue = typedText;
        }

直接进入Viewmodel中的方法时遇到的问题是,直到失去焦点,它才会更新属性,因此除非我使用后面的代码对其进行设置,否则搜索值为null。

再次获得帮助,使它对MVVM更友好。谢谢!

1 个答案:

答案 0 :(得分:1)

只需将UpdateSourceTrigger属性设置为PropertyChanged

<TextBox ... Text="{x:Bind ViewModel.SearchValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ... />

然后,只要绑定目标值发生更改,即每次击键时,源属性(ViewModel.SearchValue)都应更新。