有没有办法避免选择器中出现重复项

时间:2019-04-06 23:33:44

标签: c# xamarin.forms android-sqlite

我正在创建一个用于列出自己拥有和想要的书籍的应用。此应用具有Sqlite数据库。每本书都有一行,其中包含ID,作者和标题列。我的问题是,当我添加一本新书时,我想让该用户选择键入新的作者姓名或从选择器中获取一个。选择器ItemsSource来自“作者”列。我的问题是,每位作者只能拥有一本书,而作者的名字在选择器中多次显示

Xaml

toArray()

隐藏代码

<StackLayout Orientation="Horizontal">
    <Entry x:Name="authorName" HorizontalOptions="FillAndExpand" Text="{Binding Author}"
       Keyboard="Text" 
       StyleClass="entry"/>

    <StackLayout>
        <Button x:Name="PickAuthor" Text="..." WidthRequest="40"
        Clicked="PickAuthor_Clicked"/>
    </StackLayout>

    <Picker x:Name="ExistingAuthors"
            Title="Select Author"
            IsVisible="False"
            SelectedIndexChanged="ExistingAuthors_SelectedIndexChanged">
        <Picker.ItemDisplayBinding>
            <Binding Path="Author" />
        </Picker.ItemDisplayBinding>
    </Picker>
</StackLayout>

我不希望选择器取代重复项。

2 个答案:

答案 0 :(得分:2)

要从列表中删除重复项,可以使用Linq。下面的方法按重复字段对集合进行分组,然后选择第一组。

private void PickAuthor_Clicked(object sender, EventArgs e)
{
    ExistingAuthors.ItemsSource = _book.GroupBy(b => b.Author)    // group by Author
                                       .Select(g => g.First())    // select first group
                                       .ToList();
    ExistingAuthors.Focus();
}

这将返回您的实体类型的列表。

答案 1 :(得分:0)

如果仅显示作者列表,请从Authors中选择_book,然后调用Distinct删除重复的作者姓名。

private void PickAuthor_Clicked(object sender, EventArgs e)
{        
    ExistingAuthors.ItemsSource = _book.Select(x => x.Author.Trim()).Distinct().ToList();
    ExistingAuthors.Focus();
}