【问题标题】:No repetition of values in list (C#)列表中的值不重复(C#)
【发布时间】:2017-03-30 08:44:30
【问题描述】:

我创建了一个收藏列表框,用户可以在其中将来自Textblock 的文本保存在MainPage.xaml

<StackPanel Grid.Row="0" Grid.Column= "0" HorizontalAlignment= "Left" VerticalAlignment= "Top" >
    < Button x:Name= "FavoriteButton" FontFamily= "Segoe MDL2 Assets"
            Content= "&#xE006;" BorderBrush= "Transparent" FontSize= "28"
            Foreground= "{StaticResource PhoneForegroundBrush}"
            Style= "{StaticResource ButtonStyle1}" Click= "FavoriteButton_Click" />
</ StackPanel >

<StackPanel Grid.Row="0" Grid.Column= "2" HorizontalAlignment= "Left" VerticalAlignment= "Top" >
    < Button x:Name= "FavoriteListButton" FontFamily= "Segoe MDL2 Assets"
            Content= "&#xEA55;" BorderBrush= "Transparent" FontSize= "28"
            Foreground= "{StaticResource PhoneForegroundBrush}"
            Style= "{StaticResource ButtonStyle1}" Click= "FavoriteListButton_Click" />
</ StackPanel >

C#

    private void FavoriteButton_Click(object sender, RoutedEventArgs e)
    {

        listobj.Add(new MyData { AnswerName = AnswerTextBlock.Text });


        using (IsolatedStorageFileStream fileStream = Settings1.OpenFile("MyStoreItems", FileMode.Create))
        {
            DataContractSerializer serializer = new DataContractSerializer(typeof(MyDataList));
            serializer.WriteObject(fileStream, listobj);

        }
    }

    private void FavoriteListButton_Click(object sender, RoutedEventArgs e)
    {
        if(FavoriteListBox.Visibility.Equals(Visibility.Collapsed))
        {
            FavoriteListBox.Visibility = Visibility.Visible;
        }
        else if(FavoriteListBox.Visibility.Equals(Visibility.Visible))
        {
            FavoriteListBox.Visibility = Visibility.Collapsed;
        }           
    }

和列表框

xaml

        <StackPanel Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Top">                
            <ListBox x:Name="FavoriteListBox" Visibility="Collapsed" 
                     SelectionChanged="FavoriteListBox_SelectionChanged"
                     HorizontalAlignment="Stretch"
                     VerticalAlignment="Top" Opacity="1"
                     Background="{StaticResource PhoneBackgroundBrush}" Foreground="{StaticResource PhoneForegroundBrush}"
                     Height="300" Width="250">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Visibility="Visible" x:Name="FavoriteListBoxTextBlock"  
                                   FontSize="35" Foreground="Black" Text="{Binding AnswerName}"/>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </StackPanel>

C#

public partial class MainPage : PhoneApplicationPage
{
    IsolatedStorageFile Settings1 = IsolatedStorageFile.GetUserStoreForApplication();
    MyDataList listobj = new MyDataList();

    public MainPage()

    {
        InitializeComponent();

        this.Loaded += MainPage_Loaded;

        if (Settings1.FileExists("MyStoreItems"))
        {
            using (IsolatedStorageFileStream fileStream = Settings1.OpenFile("MyStoreItems", FileMode.Open))
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(MyDataList));
                listobj = (MyDataList)serializer.ReadObject(fileStream);

            }
        }


        FavoriteListBox.ItemsSource = listobj;//binding isolated storage list data



    private void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        if (Settings1.FileExists("MyStoreItems"))//loaded previous items into list
        {
            using (IsolatedStorageFileStream fileStream = Settings1.OpenFile("MyStoreItems", FileMode.Open))
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(MyDataList));
                listobj = (MyDataList)serializer.ReadObject(fileStream);

            }
        }
    }

    public class MyData
    {
        public string AnswerName { get; set; }            
    }
    public class MyDataList : ObservableCollection<MyData> //for storing mydata class items with type of list
    {

    }

Textbox 的所有显示一些文本的文本都会在点击喜欢的按钮时进入隔离存储。但即使列表中已经存在该文本,它也会再次复制相同的文本,所以我希望当用户点击收藏按钮时,它应该首先检查列表中是否已经存在文本,如果存在则它应该替换或不应该复制再次。那么该怎么做呢。

【问题讨论】:

  • AnswerTextBlock 是文本块,其中一些文本将可见并转到收藏列表
  • 或者也回答有关如何检查列表框中是否存在文本的详细信息

标签: c# windows-phone-8.1 isolatedstorage listboxitem windows-phone-silverlight


【解决方案1】:

您可以在 FavoriteButton_Click 方法的开头使用 LINQ Any 查询很容易地检查重复项:

private void FavoriteButton_Click( object sender, RoutedEventArgs e )
{
    //check if there is any item with the same text
    //in which case do not continue
    if ( listobj.Any( l => l.AnswerName == AnswerTextBlock.Text ) ) return;

    listobj.Add( new MyData { AnswerName = AnswerTextBlock.Text } );


    using ( IsolatedStorageFileStream fileStream = Settings1.OpenFile( "MyStoreItems", FileMode.Create ) )
    {
        DataContractSerializer serializer = new DataContractSerializer( typeof( MyDataList ) );
        serializer.WriteObject( fileStream, listobj );

    }
}

【讨论】:

  • 如果该项目已经存在,我可以从列表中删除该项目,以防止它再次复制。如果我的应用列表中已经存在该项目,最好删除该项目
  • 好吧,如果它是完全相同的条目,我看不出有理由删除而不是把原来的条目留在那里:-)
  • 但是如果已经存在的话可以使用同一个按钮删除
  • 谢谢,现在我有足够的关于列表框的信息,谢谢你的帮助,....如果你能回答我未来的问题,我会很高兴。你的答案总是有效.. 好....... ;) :)
  • 哈哈现在它的工作谢谢..... :) 我将发布新的问题列表框项目选择,希望你能帮助...谢谢 :)..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
相关资源
最近更新 更多