Как создать несколько списков в зависимости от полученных данных? - PullRequest
0 голосов
/ 23 ноября 2011

Я использую веб-сервис для получения данных, и я полностью возвращаю данные

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{ String username = txtblock4.Text.Trim();
String hash = txtblock8.Text.Trim();
client.UploadStringAsync(new    
Uri("http://www.picturelove.mobi/picturelove3/getmessages.php?loginType=N&email=" +   
username + "&hash=" + hash), "Post");
client.UploadStringCompleted += new   
UploadStringCompletedEventHandler(client_UploadStringCompleted);
}

Я анализирую xml-ответ, как показано ниже, с двумя функциями сохранения данных сообщения и генерации данных сообщения. Я получаю данные в списке.

void client_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{

if (e.Error != null)
txtblock10.Text = e.Error.Message.Trim();
else
txtblock10.Text = e.Result.Trim();
String XmlString = txtblock10.Text.Trim();
using (XmlReader reader = XmlReader.Create(new StringReader(XmlString)))
{

while (reader.ReadToFollowing("all_messages"))
{
while (reader.Read())
{
try
{
reader.ReadToFollowing("id");
string id = reader.ReadElementContentAsString();

reader.MoveToAttribute("from");
string n_from = reader.ReadElementContentAsString();

reader.MoveToAttribute("to");
string n_to = reader.ReadElementContentAsString();

reader.MoveToAttribute("time");
string n_time = reader.ReadElementContentAsString();

reader.MoveToAttribute("sub");
string n_sub = reader.ReadElementContentAsString();

reader.MoveToAttribute("ct");
string n_ct = reader.ReadElementContentAsString();

reader.MoveToAttribute("txt");
string n_txt = reader.ReadElementContentAsString();

reader.MoveToAttribute("msg_image");
string n_image = reader.ReadElementContentAsString();

reader.MoveToAttribute("gender");
string n_gender = reader.ReadElementContentAsString();

reader.MoveToAttribute("name");
string n_name = reader.ReadElementContentAsString();

reader.MoveToAttribute("avatar");
string n_avatar = reader.ReadElementContentAsString();
ObservableCollection<SampleData> dataSource = new ObservableCollection<SampleData>();
dataSource.Add(new SampleData() { Name = txtblock11.Text, Text = txtblock12.Text, 
Time= txtblock13.Text, Picture = txtblock9.Text });
// listBox.Items.Add(new SampleData() { Name = txtblock11.Text, Text = txtblock8.Text,                 
Time = txtblock5.Text, Picture = txtblock12.Text });
SaveMessageData(new SampleData() { Name = txtblock11.Text, Text = txtblock12.Text, Time     
= txtblock13.Text, Picture = txtblock9.Text });
// listBox1.ItemsSource =
this.GenerateMessageData();
}
catch
{
//MessageBox.Show("No New Messages For You", "No Message", MessageBoxButton.OK);
break;
}
}
}
}
}
}
public class SampleData
{
public string Name { get; set; }
public string Text { get; set; }
public string Time { get; set; }
public string Picture { get; set; }
}
public void SaveMessageData()
{
using (var isoStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var isoStream = new IsolatedStorageFileStream("MyTextfile.txt", FileMode.Append,             
isoStorage))
    {
XmlSerializer serializer = new XmlSerializer(typeof(List<SampleData>));
using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings))
{
List<SampleData> data = new List<SampleData>();
foreach (SampleData obj in Listbox.Items)
{
data.Add(obj);


}

data.Add(msg);
if (data != null)
serializer.Serialize(xmlWriter, data);

}
}
}

}
}

public void GenerateMessageData()
{

List<SampleData> data;// = new List<SampleData>();
try
{
using (IsolatedStorageFile myIsolatedStorage =     
IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("MyTextfile.txt",     
 FileMode.Open))
{
XmlSerializer serializer = new XmlSerializer(typeof(List<SampleData>));
data = (List<SampleData>)serializer.Deserialize(stream);
this.Listbox.ItemsSource = data;
return data;
}
}
}
catch (Exception exp)
{
MessageBox.Show("No New Messages For You", "No Message", MessageBoxButton.OK);
}
return null;
}

Но, настоящая проблема в том, что если есть два набора данных (два сообщения), если я получаю, оба отображаются в одном и том же списке. Как манипулировать или перебирать несколько списков, если есть несколько данных?

1 Ответ

0 голосов
/ 23 ноября 2011

Если вам нужно объединить два списка, и могут быть элементы, которые существуют в обоих, но вы хотите появиться в объединенном списке только один раз, самое простое решение - просто проверить, есть ли он в списке, прежде чем добавлять его.

...