Je développe une application de magasin Windows.Application de magasin C#: Mise à jour d'un ListView
J'ai
class User
{
public string Login { get; set; }
public string Name { get; set; }
public string Enabled { get; set; }
public User(string Login)
{
this.Login = Login;
this.Load();
}
async public Task Load()
{
HttpResponseMessage response = await App.http.GetAsync("https://example.com/user?login=" + Login);
var xml = XDocument.Parse(await response.Content.ReadAsStringAsync());
var user = (from entry in xml.Descendants("user")
select new
{
Name = (string)entry.Element("name"),
Enabled = (string)entry.Element("enabled")
}).First();
this.Name = user.Name;
this.Enabled = user.Enabled;
}
}
qui décrit l'utilisateur et charge toutes les données de manière asynchrone à partir du serveur. J'ai aussi MainPage.xaml avec le code suivant derrière:
public sealed partial class MainPage : Mail.Common.LayoutAwarePage
{
ObservableCollection<User> Users = new ObservableCollection<User>();
public MainPage()
{
this.InitializeComponent();
itemListView.ItemsSource = Users;
}
private async void pageRoot_Loaded(object sender, RoutedEventArgs e)
{
HttpResponseMessage response = await App.http.GetAsync("https://example.com/listusers");
var xml = XDocument.Parse(await response.Content.ReadAsStringAsync());
foreach (var item in from entry in xml.Descendants("email")
select new
{
Login = (string)entry.Element("name")
})
{
Users.Add(new User(item.Login));
}
}
}
MainPage
a une ListView
qui Prèsentoir ObservableCollection<User> Users
. (J'ai DataTemplate qui ressemble à:
<DataTemplate x:Key="UserTemplate">
<StackPanel Orientation="Horizontal" Width="470" Height="85">
<Border Height="40" Width="40" Margin="10,10,0,10" VerticalAlignment="Top">
<Image Source="/SampleImage.png" Stretch="UniformToFill"/>
</Border>
<StackPanel Orientation="Vertical" VerticalAlignment="Top" Margin="0,10,0,0">
<TextBlock Text="{Binding Login}" FontSize="20" FontWeight="Semilight"
Margin="10,0,0,0" Width="320" Height="26" TextTrimming="WordEllipsis"
HorizontalAlignment="Left" VerticalAlignment="Top"/>
<TextBlock Text="{Binding Name}"
Margin="10,2,0,0" Width="320" TextTrimming="WordEllipsis" TextWrapping="Wrap"
HorizontalAlignment="Left"/>
</StackPanel>
<TextBlock Text="{Binding Enabled}" FontSize="16" Margin="20,0,0,0" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
).
Malheureusement, Je ne vois que les données initiales (connexions) dans la liste. Toutes les autres données qui sont reçues de manière asynchrone dans le constructeur (name
, enabled
) ne sont pas affichées dans le listview
(je suis sûr, il est chargé correctement). Comment puis-je faire ListView
pour afficher l'état actuel des objets dans la collection Users
? Ou dois-je effectuer des requêtes synchrones (comment?)
Votre classe '' user' doit mettre en œuvre INotifyPropertyChanged' et augmenter les notifications de modification de la propriété correctement. –
Pourriez-vous s'il vous plaît donner un exemple? – simon
@HighCore Ok, cela a fonctionné, merci !!! Vous pouvez poster ceci comme réponse, et je le marquerai comme une solution. – simon