如何使用 ObservableCollection 绑定到自动完成选定项

How to bind to autocomplete selecteditem with 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);
    }
}

但是我不希望type是object,改成ObservableCollection<SearchItem>,SelectedLocation就不再拾取了。当它是一个集合时,我可以获得提示或建议以正确绑定到所选项目。

我试过的方法没有用

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

在 OP 澄清后编辑:

看来您必须使用 ObservableCollection<object> 才能使其正常工作。如果您随后想要访问单独的 SearchItem 对象,您将需要一种机制来调用另一个方法或 属性 setter 并将项目投射到那里。

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

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