Hello,
I have a very simple piece of code to bind my RadMenu control to an ObservableList of Menus.
My xaml looks like this:
<telerik:RadMenu Name:"MainMenu" ItemsSource="{Binding Menus}"/>
This works fine. In order to display something more interesting, I can add:
<telerik:RadMenu Name:"MainMenu" ItemsSource="{Binding Menus}" DisplayMemberPath="Name" />
And I get the Name property of my Menus displayed.
Now I would like to get a step further as my Menu class has a SubMenus property so I try to play with RadMenuItem styling and this is where I get lost.
If I write simple code like this, that according to me should do the same as the DisplayMemberPath :
<telerik:RadMenu Name:"MainMenu" ItemsSource="{Binding Menus}" >
<telerik:RadMenu.Resources>
<Style TargetType="telerik:RadMenuItem">
<Setter Property="Header" Value="{Binding Name}"/>
</Style>
</telerik:RadMenu.Resources>
</telerik:RadMenu>
Nothing is displayed on my window when running the code.
I have checked everything, I can see in my view that the Menu is created and the items inside, etc... but the RadMenus don't display.
As soon as I comment out the Style, menus are displayed. As everything else is straightforward in my code, I think I am missing something obvious but I can't find it. There is no error in debug for binding issues or else.
I use Telerik 2017.1.22.45.
Thanks for your feedback.
Hello,
I'm using telerik control tools for WPF UI ver: 2015.1.0401.45
I have noticed that radlistbox has a huge memory leak. On replacing radlistbox with Microsoft listbox, memory leak does not occur.
I'm attaching the demo project (replace extension of file from .jpg to .zip).
This project demonstrates the problem of memory leak. Actually the memory leak occurs on data binding
I've remarked the Microsoft listbox in xaml, so to prove my claim, just use Microsoft listbox instead of radlistbox and see the difference in memory usage of the processes.
Do you have a patch to fix this issue ?
Thank you,
Alex
Dear Telerik,
I encountered pretty weird behavior while using VirtualQueryableCollectionView+grid.
I have a grid and a simple combobox for filtering. When I select a value in the combobox everything works as expected:
-- selected combobox value changed
-- handle property change event in the model
-- set collection total and reload required page
However if i click any cell I can see that virtual collection reloads ALL the pages. I attached a small repro u can play with.
Scenario 1: start the app - select a unit from the combobox - click any cell (e.g. top left cell) - check the output
Scenario 2: start the app - click the button - click any cell (e.g. top left cell) - check the output
--
Here is the xaml
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
Title="MainWindow" Height="350" Width="525" WindowStartupLocation="CenterScreen">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<telerik:RadButton Content="reload" HorizontalAlignment="Left" Margin="2" Command="{Binding ReloadCommand}" />
<telerik:RadComboBox ItemsSource="{Binding Units}" HorizontalAlignment="Right" Margin="2"
EmptyText="select unit" SelectedItem="{Binding Unit, Mode=TwoWay}"/>
<telerik:RadGridView AutoGenerateColumns="False" ShowGroupPanel="False"
ItemsSource="{Binding Data}" Grid.Row="1" IsReadOnly="True" >
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding RowNo}" Header="row no" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</Grid>
</Window>
Here is the model
#region Usings
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Windows.Input;
using Telerik.Windows.Data;
#endregion
namespace WpfApplication1
{
public class Model
{
#region Class constants
private const int PAGE_SIZE = 100;
#endregion
#region Class members
private UnitType _unit;
protected VirtualQueryableCollectionView _data;
#endregion
#region Class properties
public IEnumerable<UnitType> Units
{
get
{
return Enum
.GetValues( typeof( UnitType ) )
.Cast<UnitType>()
.ToList();
}
}
public UnitType Unit
{
get
{
return _unit;
}
set
{
_unit = value;
LoadHistory();
}
}
public VirtualQueryableCollectionView Data
{
get
{
return _data;
}
}
public CommandHandler ReloadCommand { get; set; }
#endregion
#region Class initialization
public Model()
{
_data = new VirtualQueryableCollectionView()
{
LoadSize = 100
};
_data.ItemsLoading += ( o, ea ) => OnNeedDataPage( ea.StartIndex / _data.LoadSize );
ReloadCommand = new CommandHandler( x => LoadHistory(), true );
}
#endregion
#region Class event handlers
private void LoadHistory()
{
_data.ResetItems();
LoadHistory( 0 );
}
protected void OnNeedDataPage( int iPageIndex )
{
LoadHistory( iPageIndex );
}
private void LoadHistory( int iPageIndex )
{
var iTotalCount = 1000;
Debug.WriteLine( "load glass history page: " + iPageIndex );
if( iTotalCount != _data.VirtualItemCount )
{
_data.VirtualItemCount = iTotalCount;
}
int iStartIndex = iPageIndex * PAGE_SIZE;
var list = new List<TestData>();
for( int i = iPageIndex * PAGE_SIZE; i < iPageIndex * PAGE_SIZE + PAGE_SIZE; ++i )
{
list.Add( new TestData() { RowNo = i } );
}
_data.Load( iStartIndex, list );
}
#endregion
#region Class internal structs
public enum UnitType
{
none,
a,
b
}
public class TestData
{
public int RowNo { get; set; }
}
#endregion
}
public class CommandHandler:ICommand
{
#region Class members
protected Action<object> _action;
protected bool _canExecute;
#endregion
#region Class events
public event EventHandler CanExecuteChanged;
public void FireCanExecuteChanged( bool b )
{
_canExecute = b;
if( null != CanExecuteChanged )
{
CanExecuteChanged( this, EventArgs.Empty );
}
}
#endregion
#region Class initialization
public CommandHandler( Action<object> action, bool canExecute )
{
_action = action;
_canExecute = canExecute;
}
#endregion
#region Class public methods
public bool CanExecute( object parameter )
{
return _canExecute;
}
public void Execute( object parameter )
{
_action( parameter );
}
#endregion
}
}
Hello everyone,
I'm currently stucked with the following situation.
I'm generating via a ViewModel the shapes for my toolbox. This is done via a property binding.
01.Public ReadOnly Property CostCenterToolbox As ObservableCollection(Of DiagramGallery)02. Get03. Dim galleryCollection = New ObservableCollection(Of DiagramGallery)()04. Dim gallery As New DiagramGallery With {.Header = "Cost centers"}05. 06. costCenterDataTable = ParameterProduction.Instance.Open_ParCostCenter07. For Each row As DataRow In costCenterDataTable 08. Dim node = New WorkflowCostCenterNode With09. {10. .Content = row.Item("costCenter") & vbCrLf & row.Item("Description"),11. .TreeId= 0,12. .ProcessId = 0,13. .CostCenter = row.Item("costCenter"),14. .Description = row.Item("Description")15. }16. gallery.Shapes.Add(node)17. Next18. galleryCollection.Add(gallery)19. 20. Return galleryCollection21. End Get22.End PropertyOn the right side of the toolbox there is my diagram, which initially loads an existing workflow.
Now the problem is, that when dragging a shape from the toolbox to the diagram the dropped shape doesn't have any information about the node properties I gave it (in this case TreeId, ProcessId, CostCenter, Description are all Nothing).
As the documentation says, I need to serialize my custom properties, so that the diagram recognizes them.
The initially loaded workflow to the diagram is done via a GraphSource, which works perfectly (with the same node properties from above). In the GraphSource class I have those SerializeNode and DeserializeNode methods overriden.
But for the toolbox the nodes aren't in a graph source but added directly to the gallery and then to the gallerycollection (see code snippet above).
This might be the problem.
Is it possible to create the nodes, add them to a graph source object and then add them to the toolbox gallery?
Otherwise, how can I achieve, that when dragging the shape (initially created with the node and custom properties) from the toolbox to my diagram, that the node behind the shape has the custom property values I've initially set. Maybe the node properties are already lost, when the shapes are loaded into the toolbox?
I've read the following documentations without success :-(
- http://docs.telerik.com/devtools/wpf/controls/raddiagram/howto/drag-custom-toolboxitem
Any hints and maybe short examples are very welcome
