0

habe ich eine Favoritenliste Feld, in dem der Benutzer Text von Textblock in MainPage.xamlKeine Wiederholung von Werten in der Liste (C#)

<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; 
     }   
    } 

und Listbox

XAML sparen

 <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 
    { 

    } 

Alle Texte von Textbox, die einen Text zu isolierten Speicher auf Favoritentaste klicken gehen zeigen. aber es kopiert den gleichen Text noch einmal, selbst wenn dieser Text bereits in der Liste vorhanden ist, also möchte ich, wann auch immer Benutzer auf Lieblingsknopf klicken, sollte es zuerst überprüfen, ob Text bereits in der Liste existiert oder nicht, wenn vorhanden, sollte er ersetzen oder nicht kopieren nochmal. also wie man das macht.

+0

AnswerTextBlock ist TextBlock- wo einige Text, wie man überprüft, ob Text existiert oder nicht in der Listbox –

+0

oder auch beantworten Details

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); } } 

Antwort

1

Sie können ganz einfach eine LINQ Any Abfrage zu Beginn des FavoriteButton_Click Verfahren zur Dublettenprüfung mit:

über sichtbar sein wird und gehe zu Favoritenliste
+0

kann ich das Einzelteil von der Liste entfernen, wenn es bereits existiert anstatt zu verhindern, dass es wieder kopiert. ist es besser, das Element zu entfernen, wenn bereits in der Liste für meine App existiert –

+0

Nun, wenn es genau der gleiche Eintrag ist, sehe ich keinen Grund zu entfernen, anstatt nur das Original dort zu lassen :-) –

+0

Aber es ist möglich, zu entfernen, wenn bereits vorhanden mit der gleichen Schaltfläche –

Verwandte Themen