列表中没有重复的值 (C#)
No repetition of values in list (C#)
我创建了一个收藏夹列表框,用户可以在其中保存来自 Textblock
的文本到 MainPage.xaml
<StackPanel Grid.Row="0" Grid.Column= "0" HorizontalAlignment= "Left" VerticalAlignment= "Top" >
< Button x:Name= "FavoriteButton" FontFamily= "Segoe MDL2 Assets"
Content= "" 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= "" 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
中显示某些文本的所有文本在单击收藏夹按钮时转到独立存储。但它会再次复制相同的文本,即使该文本已经存在于列表中,所以我希望每当用户单击收藏按钮时,它应该首先检查文本是否已经存在于列表中,如果存在,那么它应该替换或不应该复制再次。那么如何做到这一点。
您可以在 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 );
}
}
我创建了一个收藏夹列表框,用户可以在其中保存来自 Textblock
的文本到 MainPage.xaml
<StackPanel Grid.Row="0" Grid.Column= "0" HorizontalAlignment= "Left" VerticalAlignment= "Top" >
< Button x:Name= "FavoriteButton" FontFamily= "Segoe MDL2 Assets"
Content= "" 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= "" 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
中显示某些文本的所有文本在单击收藏夹按钮时转到独立存储。但它会再次复制相同的文本,即使该文本已经存在于列表中,所以我希望每当用户单击收藏按钮时,它应该首先检查文本是否已经存在于列表中,如果存在,那么它应该替换或不应该复制再次。那么如何做到这一点。
您可以在 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 );
}
}