Ich habe dieses merkwürdige Verhalten gestern bemerkt, als ich eine Demo-Anwendung für WP zusammenstellte. Gewöhnlich übergebe ich niemals einfache Dinge und niemals das gleiche - aber dieses Mal habe ich es getan. Wenn das Steuerelement an eine ObservableCollection vom Typ int oder string gebunden ist, fügt das Steuerelement zuerst ein Element, dann zwei, dann drei und dann vier hinzu, wenn der Wert derselbe ist. Anstatt jedes Mal ein neues hinzuzufügen. Im Grunde ist es tut dies:Warum fügt der LongListSelector zusätzliche Elemente hinzu, wenn die Sammlungswerte identisch sind?
Items.Count ++
Wenn ich aber das Element ändern, sagen Zeichenfolge, um etwas Einzigartiges (a GUID.ToString zum Beispiel) ist es das erwartete Verhalten hat.
Dies ist unabhängig davon, wie der DataContext festgelegt ist, oder wenn ich LayoutMode = "List" IsGroupingEnabled = "False" zum Steuerelement hinzufügen.
Warum macht es das? Und ist das erwartete Verhalten?
Ich verbrachte Stunden auf eine Antwort zu suchen, so einfach nicht wahllos Links über die Steuer einfügen :)
-Code für die Ansicht bitte:
<phone:PhoneApplicationPage
x:Class="Bug.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<StackPanel>
<Button Click="Button_Click">Add</Button>
<phone:LongListSelector Width="300" Height="600" ItemsSource="{Binding Items}"/>
</StackPanel>
</phone:PhoneApplicationPage>
-Code hinter:
using System.Collections.ObjectModel;
using System.Windows;
namespace Bug
{
public partial class MainPage
{
// Constructor
public MainPage()
{
InitializeComponent();
Items = new ObservableCollection<string>();
//DataContext = this;
}
public ObservableCollection<string> Items { get; set; }
private void Button_Click(object sender, RoutedEventArgs e)
{
Items.Add("A");
// This works as expected
//Items.Add(Guid.NewGuid().ToString());
}
}
}
So Items.Add wird nur einmal jedes Mal getroffen, aber die Sammlung geht von 1, 3, 6, 10, etc.? – invalidusername
Ich habe auch [dieses Problem] (http://stackoverflow.com/questions/19356668/long-list-selector-observable-collection-and-visual-tree-problems), und leider habe ich keine Lösung gefunden bis jetzt. Wenn Sie Grouping in LLS nicht verwenden, verwenden Sie ListBox - ohne dieses Problem. – Romasz
ivalidusername: nein es fügt items.count plus eins hinzu. Probieren Sie den Code aus. @Romasz die Dokumente sagen, dass die LLS aus Leistungsgründen über LB empfohlen wird. AFAIK –