我正在为我所在的公司创建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更友好。谢谢!
答案 0 :(得分:1)
只需将UpdateSourceTrigger
属性设置为PropertyChanged
:
<TextBox ... Text="{x:Bind ViewModel.SearchValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ... />
然后,只要绑定目标值发生更改,即每次击键时,源属性(ViewModel.SearchValue
)都应更新。