首页 > 解决方案 > 如何使用 ObservableCollection 绑定到自动完成选定项

问题描述

我目前正在从 syncfusion 实现自动完成框。当前选择模式设置为Token

<autocomplete:SfAutoComplete x:Name="autoComplete"
                                DisplayMemberPath="Location"
                                MultiSelectMode="Token"
                                HeightRequest="120"
                                HorizontalOptions="FillAndExpand"
                                TokensWrapMode="Wrap" 
                                SelectedItem="{Binding SelectedLocation}"
                                DataSource="{Binding FilteredLocations}"                                                   
                                Text="{Binding SearchLocation, Mode=TwoWay}" >
</autocomplete:SfAutoComplete>

我目前正在使用 MVVM 方法,如何在不使用对象基类型的情况下绑定到 SelectedLocation。

private ObservableCollection<SearchItem> _filteredLocations;
public ObservableCollection<SearchItem> FilteredLocations
{
    get { return _filteredLocations; }
    set { SetProperty(ref _filteredLocations, value); }
}

我现在的作品

public object SelectedLocation
{
    get { return _selectedLocation; }
    set
    {
        SetProperty(ref _selectedLocation, value);
    }
}

但我不希望类型为对象,而我将其更改为ObservableCollection<SearchItem>, SelectedLocation 不再被拾取。当它是一个集合时,我是否可以获得正确绑定到选定项目的提示或建议。

我试过的没有用

public ObservableCollection<SearchItem> SelectedLocation
{
    get { return _selectedLocation; }
    set
    {
        SetProperty(ref _selectedLocation, value);
    }
}

标签: c#xamarinmvvmxamarin.formssyncfusion

解决方案


在OP澄清后编辑:

看来您必须使用ObservableCollection<object>. 如果您随后想要访问各个 SearchItem 对象,您将需要一种机制来调用另一个方法或属性设置器并将项目转换到那里。

public ObservableCollection<object> SelectedLocation
{
    get { return _selectedLocation; }
    set
    {
        SetProperty(ref _selectedLocation, value);
    }
}

有关如何使用ObservableCollection<object>然后将结果转换为字符串(或在您的情况下转换为SearchItem)的完整示例,请查看此知识库文章:如何从 AutoComplete 获取 SelectedText。这不是您的用例的 1:1,但应该足以继续。


推荐阅读