I am using a RadGridView to display appointments. I am adding paging to the control with RadDataPager. I am setting the ItemSource property for the RadGridView to {Binding Path=PagedSource, ElementName=unscheduledWorkOrdersRadDataPager }. I am then overriding the ConvertDraggedData(object data) method and using the DataObjectHelper class in order to obtain data from the object data parameter and then setting the returned IEnumerable<IOccurence> accordingly.
The problem is that whenever I added paging to the RadGridView. The DataObjectHelper is not able to properly retrieve the dragged data from the object data parameter.
When using INotifyDataErrorInfo, items are still validated even when the ValidationType property is None.
Please note that when the AutoGeneratedColumns property is set to true, the item's HasErrors property will be evaluated, but only once.
Using SearchPanel and getting search results highlighted is a very usefull feature. However at the moment it is only possible to change the color of the highlight-portion of HighlightTextBlock. It would be nice if I have more formatting options like:
etc. So if I search for "find" I get results like "find me"
The MatchAllTerms search mode doesn't behave as epxected when the GroupRenderMode property of RadGridView is set to Flat.
To work this around, set the GroupRenderMode property of RadGridView to True.
Hi guys,
we have a messaging service that broadcasts a couple of messages every 1-5 seconds.
When our client module receives those messages, we want to append them at the bottom of a grid (RadGridView).
After appending them, we also want to scroll to the very bottom of that grid, so that the newest and therefore bottommost items come into view.
Documentation and forums suggest we go the AttachedBahaviour and ScrollIntoViewAsync way.
Our behaviour looks like this:
public class ScrollToNewItemBehavior : Behavior<RadGridView>
{
public static bool GetIsEnabled(DependencyObject obj) => (bool)obj.GetValue(IsEnabledProperty);
public static void SetIsEnabled(DependencyObject obj, bool value) => obj.SetValue(IsEnabledProperty, value);
public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(ScrollToNewItemBehavior), new PropertyMetadata(false, OnIsEnabledChanged));
private static void OnIsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is RadGridView gridView)
gridView.Items.CollectionChanged += (s, args) =>
{
if (args.Action == NotifyCollectionChangedAction.Add)
{
gridView.ScrollIntoViewAsync(args.NewItems[0], gridView.Columns[0], null);
// exchanging args.NewItems[0] for gridView.Items[gridView.Items.Count-1] yields same result
//gridView.ScrollIntoViewAsync(gridView.Items[gridView.Items.Count-1], gridView.Columns[0], null);
}
};
}
}
Our Message class:
public class Message : ModelBase<Message>
{
public string Text { get; set; }
}
Our Messages collection in the ViewModel:
private RadObservableCollection<Message> _messages;
public RadObservableCollection<Message> Messages
{
get => _messages;
set
{
_messages = value;
NotifyPropertyChanged(m => m.Messages);
}
}
The collection is updated (in the ViewModel) like this:
Task.Run(async () =>
{
for (int i = 0; ; i++)
{
await Task.Delay(1000);
Messages.Add(new Message { Text = $"{i} - sftrvwj,erhvtwejhrfvtjlwehftrwejh" });
}
});
The grid is defined like this:
<telerik:RadGridView
x:Name="gridView"
ItemsSource="{Binding Messages, Mode=OneWay}"
IsSynchronizedWithCurrentItem="False"
IsPropertyChangedAggregationEnabled="True"
AutoGenerateColumns="False"
SelectionMode="Single"
CanUserFreezeColumns="False"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
CanUserDeleteRows="False"
CanUserInsertRows="False"
behaviours:ScrollToNewItemBehavior.IsEnabled="True"
CanUserGroupColumns="False"
IsReadOnly="True"
IsManipulationEnabled="False"
CanUserReorderColumns="False"
CanUserSearch="False"
ShowGroupPanel="False">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn
DataMemberBinding="{Binding Text}"
Header="Text"
ShowDistinctFilters="False"
IsSortable="False"/>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
Nothing too fancy.
What we observe:
When a message is added, the view and the scroll indicator randomly jump to the top or the bottom of the grid and stay there until the next message is added.
We tried AddRange, Suspend-/ResumeNotifications, ObservableCollection instead of RadObservableCollection.
We disabled many grid features.
We tried .NetCore
,
we tried .net Framework
To no avail.
This seems to be a bug.
Do you know any workarounds or a completely different approach to achieve the desired behaviour?
Side note:
When we set GroupRenderingMode to Flat,
GroupRenderMode="Flat"
the view stays at the bottom. The scroll indicator stays at the bottom as well, but once in a while jumps a little bit up, as if by one row, and down to the bottom again without the view changing.
At one time disabling filtering on all columns seemd to work... but later didn't.
Thanks in advance
Thorsten