0

나는 사용자가 MainPage.xaml목록에있는 값의 어떤 반복 (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; 
     }   
    } 

및 목록 상자

XAML에서 Textblock에서 텍스트를 저장할 수 좋아하는 목록 상자를 만들어

 <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의 모든 텍스트입니다. 하지만 그 텍스트가 목록에 이미 있더라도 동일한 텍스트를 다시 복사하므로 사용자가 즐겨 찾기 버튼을 클릭 할 때 먼저 목록에 텍스트가 있는지 여부를 먼저 확인해야합니다. 존재한다면 대체해야하거나 복사해서는 안됩니다. 다시. 이렇게하는 방법.

+0

AnswerTextBlock이 텍스트를 볼 수 있고 고토 좋아하는 목록 –

+0

수 또는도에 대한 세부 정보를 응답 할 것이다 TextBlock이있다, 목록 상자에 텍스트가 있는지 여부를 확인하는 방법 –

답변

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

    } 
} 
+0

목록에있는 항목이 이미 존재하는 경우 해당 항목을 다시 복사 할 수 없도록 제거 할 수 있습니까? 내 앱 목록에 이미있는 항목을 제거하는 것이 더 좋습니다 –

+0

정확히 동일한 항목 인 경우 기존 항목을 그대로 두는 대신 제거 할 이유가 없습니다 .-) –

+0

하지만 동일한 버튼 –