如何使用 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 您的用例,但应该足以继续。
我目前正在使用 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 您的用例,但应该足以继续。