如何将AutoSuggestBox项目源和文本数据绑定到LINQ函数

时间:2018-06-17 16:27:45

标签: vb.net uwp

我是UWP的新手,我在数据绑定方面也不是很有经验。鉴于我不知道是否有更直接的方法来解决我想要做的事情。

我有一个AutoSuggestBox,其中ItemSource和Text都使用x:Bind

绑定
<AutoSuggestBox x:Name="AutoBox" ItemsSource="{x:Bind Path=ViewModel.FilteredNames}" Text="{x:Bind Path=ViewModel.SearchedName, Mode=TwoWay}"/>

我的ViewModel看起来大致如下:

Public Class ViewModel
    Inherits BindableBase

    Private _searchedName As String
    Private _filteredNames As List(Of String)

    Public Property SearchedName As String
        Get
            Return _searchedName
        End Get
        Set(value As String)
            MyBase.SetProperty(Of String)(_searchedName, value, "SearchedName")
        End Set
    End Property

    Public ReadOnly Property FilteredNames As List(Of String)
        Get
            Return GlobalVariables.DetailsProvider.GetListOfNames(_searchedName)
        End Get
    End Property

End Class

GlobalVariables-Class基本上是一个Singleton,允许我访问DetailsProvider,而DetailsProvider又包含这个函数:

Public Function GetListOfNames(Optional ByVal filterString As String = "") As List(Of String)
    Dim returnNames As New List(Of String)

    'Using LINQ to filter what is searched for
    Dim filteredNames = From item As InterestingObject In Me
                        Where item.Name.StartsWith(filterString)
                        Order By item.Value
                        Select item.Name Distinct

    For Each name In filteredNames
        returnNames.Add(name)
    Next
    Return returnNames
End Function

最后,我的AutoSuggestBox上有TextHhaler的EventHandler:

Private Sub AutoBox_textchanged(sender As AutoSuggestBox, args As AutoSuggestBoxTextChangedEventArgs) Handles AutoBox.TextChanged
    ViewModel.SearchedName = sender.Text
    'the Code in Question
    sender.ItemsSource = ViewModel.FilteredNames
End Sub

这可以按预期工作。

但是:

我认为不断重新绑定ItemsSource并不是DataBinding的全部内容。是否有另一种方法可以触发重新读取ViewModel.FilteredNames属性?

我尝试将其读取和写入并从Viewmodel.SearchedName的Setter中人工“更新”ViewModel.FilteredNames属性,但这会导致重复调用GetListOfNames函数的循环,从而导致堆栈溢出。< / p>

欢迎任何建议。

P.S。:我试图通过删除变量和属性名称中的应用程序上下文来简化我的代码。我希望代码仍然一致: - )

0 个答案:

没有答案