Hallo zusammen, hallo @Nofear23m
ich bin mich aktuell aufgrund meines Projekts mit Dependency- Objects und Properties am rumschlagen.
Ich versuche gerade eine "AttachedProperty" zu erstellen die sich "AlwaysScrollToBottom" nennt. Das ist meine absolut erste eigene Dependency Property die ich für das ListView erstellen will.
Und zwar nervt mich aktuell, dass Items die zur ListView mittels DataBinding hinzugefügt werden, immer unten angehängt aber dann die ListView nicht auf das letzten Item scrollt.
Da dachte ich, dass muss mit einer DependencyProperty zu lösen sein und bin auf einen wahrscheinlich total veralteten Blogeintrag gestoßen an dem ich dann mal etwas getüftelt habe.
Ich habe mich etwas daran orientiert, stoße aber auf ein Problem. Mein aktuelle Klasse sieht wie folgt aus:
Ich weiß, dass die Bedingung von ScrollToBottom nocht fehlt, aber das scrollen nach unten ist gerade mein dringenderes Problem.
In meiner MainWindow.xaml sieht die ListView so aus:
Leider funktioniert es noch nicht wie ich will. Ich habe dann mal einen Breakpoint gesetzt in die
Kann es sein, dass die ItemsSource DependencyProperty erst nach meiner Property gesetzt wird? Oder habe ich grundsätzlich mit dem DependencyObject etwas falsch verstanden?
Danke im Voraus
ich bin mich aktuell aufgrund meines Projekts mit Dependency- Objects und Properties am rumschlagen.
Ich versuche gerade eine "AttachedProperty" zu erstellen die sich "AlwaysScrollToBottom" nennt. Das ist meine absolut erste eigene Dependency Property die ich für das ListView erstellen will.
Und zwar nervt mich aktuell, dass Items die zur ListView mittels DataBinding hinzugefügt werden, immer unten angehängt aber dann die ListView nicht auf das letzten Item scrollt.
Da dachte ich, dass muss mit einer DependencyProperty zu lösen sein und bin auf einen wahrscheinlich total veralteten Blogeintrag gestoßen an dem ich dann mal etwas getüftelt habe.
Ich habe mich etwas daran orientiert, stoße aber auf ein Problem. Mein aktuelle Klasse sieht wie folgt aus:
C#-Quellcode
- public class ListViewScrollToBottomBehaviour : DependencyObject
- {
- public bool AlwaysScrollToBottom
- {
- get { return (bool)GetValue(AlwaysScrollToBottomProperty); }
- set { SetValue(AlwaysScrollToBottomProperty, value); }
- }
- public static bool GetAlwaysScrollToBottom(ListView listView)
- {
- return (bool)listView.GetValue(AlwaysScrollToBottomProperty);
- }
- public static void SetAlwaysScrollToBottom(ListView listView, bool value)
- {
- listView.SetValue(AlwaysScrollToBottomProperty, value);
- }
- public static readonly DependencyProperty AlwaysScrollToBottomProperty =
- DependencyProperty.RegisterAttached(
- "AlwaysScrollToBottom",
- typeof(bool),
- typeof(ListViewScrollToBottomBehaviour),
- new PropertyMetadata(false, AlwaysScrollToBottomPropertyChanged));
- private static void AlwaysScrollToBottomPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- var listview = d as ListView;
- if (listview == null || e.NewValue == null) return;
- var collection = listview.ItemsSource as INotifyCollectionChanged;
- if (collection != null)
- {
- collection.CollectionChanged += (s, args) =>
- {
- var scrollViewer = listview.GetFirstDescendantOfType<ScrollViewer>();
- scrollViewer.ScrollToVerticalOffset(scrollViewer.ActualHeight);
- };
- }
- }
- }
Ich weiß, dass die Bedingung von ScrollToBottom nocht fehlt, aber das scrollen nach unten ist gerade mein dringenderes Problem.
In meiner MainWindow.xaml sieht die ListView so aus:
XML-Quellcode
- <ListView Grid.Row="0" Grid.Column="0" ItemsSource="{Binding DataPackets}" SelectedItem="{Binding SelectedDataPacket, Mode=OneWayToSource}" bh:ListViewScrollToBottomBehaviour.AlwaysScrollToBottom="True" >
- <ListView.ItemTemplate>
- <DataTemplate>
- <WrapPanel>
- <TextBlock Text="Origin: " />
- <TextBlock Text="{Binding Origin}" FontWeight="Bold" />
- <TextBlock Text=" Type: " />
- <TextBlock Text="{Binding PacketType}" FontWeight="Bold" />
- <TextBlock Text=" Cmd: " />
- <TextBlock Text="{Binding Cmd}" FontWeight="Bold" />
- </WrapPanel>
- </DataTemplate>
- </ListView.ItemTemplate>
- </ListView>
Leider funktioniert es noch nicht wie ich will. Ich habe dann mal einen Breakpoint gesetzt in die
AlwaysScrollToBottomPropertyChanged
von meiner Klasse, dort ist die ItemsSource
null.Kann es sein, dass die ItemsSource DependencyProperty erst nach meiner Property gesetzt wird? Oder habe ich grundsätzlich mit dem DependencyObject etwas falsch verstanden?
Danke im Voraus