This is a migrated thread and some comments may be shown as answers.

Cannot bind Commands to RadRibbonButton

11 Answers 298 Views
Buttons
This is a migrated thread and some comments may be shown as answers.
Tim
Top achievements
Rank 1
Tim asked on 18 Apr 2010, 01:55 AM
Is there any reason why I should be getting this error for a very simple MVVM scenario binding a Command either through Xaml or Code Behind?  I am using the 2010 Q1 controls and this is a RadRibbonButton.  It's binding to a DelegateCommand<bool> in this case.  I get an "object reference not set" error when the RibbonBar shows up even though the Command in the VM has already been instantiated and the ViewModel is already bound to the DataContext of the UserControl.  This makes no sense since I use the same pattern for every commanding scenario and this is the first time I've tried it with Rad controls.

   at Microsoft.Practices.Composite.Presentation.Commands.DelegateCommand`1.System.Windows.Input.ICommand.CanExecute(Object parameter)
   at Telerik.Windows.Controls.RadButton.CanExecuteApply()
   at Telerik.Windows.Controls.RadButton.ChangeCommand(ICommand oldCommand, ICommand newCommand)
   at Telerik.Windows.Controls.RadButton.OnCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at Telerik.Windows.PropertyMetadata.<>c__DisplayClass1.<Create>b__0(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
   at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
   at System.Windows.DependencyObject.RefreshExpression(DependencyProperty dp)
   at System.Windows.Data.BindingExpression.SendDataToTarget()
   at System.Windows.Data.BindingExpression.SourceAcquired()
   at System.Windows.Data.BindingExpression.System.Windows.IDataContextChangedListener.OnDataContextChanged(Object sender, DataContextChangedEventArgs e)
   at System.Windows.Data.BindingExpression.DataContextChanged(Object sender, DataContextChangedEventArgs e)
   at System.Windows.DataContextChangedEventHandler.Invoke(Object sender, DataContextChangedEventArgs e)
   at System.Windows.FrameworkElement.OnDataContextChanged(DataContextChangedEventArgs e)
   at System.Windows.FrameworkElement.OnAncestorDataContextChanged(DataContextChangedEventArgs e)
   at System.Windows.FrameworkElement.NotifyDataContextChanged(DataContextChangedEventArgs e)
   at System.Windows.FrameworkElement.OnTreeParentUpdated(DependencyObject newParent, Boolean bIsNewParentAlive)
   at System.Windows.DependencyObject.UpdateTreeParent(IManagedPeer oldParent, IManagedPeer newParent, Boolean bIsNewParentAlive, Boolean keepReferenceToParent)
   at MS.Internal.FrameworkCallbacks.ManagedPeerTreeUpdate(IntPtr oldParentElement, IntPtr parentElement, IntPtr childElement, Byte bIsParentAlive, Byte bKeepReferenceToParent)

11 Answers, 1 is accepted

Sort by
0
Jim Daly
Top achievements
Rank 1
answered on 19 Apr 2010, 08:16 PM
Could you post the code for RadRibbonButton that you are binding?

It looks like your command is expecting a bool value. Are you passing this as a CommandParameter?
0
Tim
Top achievements
Rank 1
answered on 19 Apr 2010, 10:11 PM
Essentlially I am trying to have a menu option for "Full Screen Mode".  So let's start simple and just add a Quick Access toolbar button.  The "Command" is bound to the "OnFullScreenModeChanged" CommandDelegate<bool> object.  The "CommandParameter" is bound to the "IsFullScreen" property but uses it's inverse value by using a "NotOperatorValueConverter".  The "Tooltip" of the TooltipService is simply bound to the "FullScreenHint" property.

This portion of the application is using a "ViewModel-First" approach so the ViewModel gets passed into the constructor of the View (which is hosting the RibbonBar obviously).  However, I immediately get an "Object reference not set" error (even after I've stepped through everything and verified that there are no "null" references in the ViewModel).  The weird thing is that the button works!  I just want it to NOT throw the error!

View Model:
/// <summary> 
/// Returns whether the Application is Full Screen or not 
/// </summary> 
public bool IsFullScreen  
    get {  
        return System.Windows.Application.Current.Host.Content.IsFullScreen;  
    } 
 
/// <summary> 
/// Returns the text hint for full screen UIHints 
/// </summary> 
public string FullScreenHint 
    get { 
        return System.Windows.Application.Current.Host.Content.IsFullScreen ?  
            "Exit Full Screen Mode" :  
            "Enter Full Screen Mode"
    } 
 
/// <summary /> 
public DelegateCommand<bool> OnFullScreenModeChanged { getprivate set; } 
 
public ViewModel(IUnityContainer container) 
    this.container = container; 
 
    this.OnFullScreenModeChanged = new DelegateCommand<bool>(this.ChangeFullScreenMode); 

Xaml:
<telerikRibbonBar:RadRibbonBar x:Name="ribbonBar"
    <!-- Quick Access Toolbar --> 
    <telerikRibbonBar:RadRibbonBar.QuickAccessToolBar> 
        <telerikRibbonBar:QuickAccessToolBar> 
            <telerikRibbonBar:RadRibbonButton 
                x:Name="qbtnFullScreen" 
                Size="Small" 
                Command="{Binding OnFullScreenModeChanged}" 
                CommandParameter="{Binding IsFullScreen, Converter=NotOperatorValueConverter}" 
                ToolTipService.ToolTip="{Binding FullScreenHint}" 
        /> 
        </telerikRibbonBar:QuickAccessToolBar> 
    </telerikRibbonBar:RadRibbonBar.QuickAccessToolBar> 
</telerikRibbonBar:RadRibbonBar> 

0
Ivan
Telerik team
answered on 22 Apr 2010, 03:39 PM
Hello Tim,

Thank you for the sample code.

As the sample code looks good could send us the problematic project to investigate the issue. Meantime we will prepare a simple project with ribbon bar and delegate commands. We will attach it here soon.

Please keep an eye on this thread.

Sincerely yours,
Ivan
the Telerik team

Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
0
Uri
Top achievements
Rank 1
answered on 23 Feb 2011, 08:43 AM
I don't know if it is still relevant, but I think your problem is that the parameter sent to the CanExecute method is null (which cannot be cast to bool).
This method is called as soon as the Command parameter is set, but before the CommandParameter is set.
To fix the problem you should change the replace the order of the parameters in the XAML, like this:

<telerikRibbonBar:RadRibbonBar.QuickAccessToolBar> 
        <telerikRibbonBar:QuickAccessToolBar> 
            <telerikRibbonBar:RadRibbonButton 
                x:Name="qbtnFullScreen" 
                Size="Small" 
CommandParameter="{Binding IsFullScreen, Converter=NotOperatorValueConverter}"
                Command="{Binding OnFullScreenModeChanged}" 
                ToolTipService.ToolTip="{Binding FullScreenHint}" 
        /> 
        </telerikRibbonBar:QuickAccessToolBar> 
    </telerikRibbonBar:RadRibbonBar.QuickAccessToolBar> 


This will ensure the a parameter value is set before the CanExecute is called.
0
Tina Stancheva
Telerik team
answered on 28 Feb 2011, 02:12 PM
Hello Uri,

Thank you for your input to this thread. I am sure that the community appreciates it. I hope that the attached RibbonBar sample application will also be helpful.

Best wishes,
Tina Stancheva
the Telerik team
Registration for Q1 2011 What’s New Webinar Week is now open. Mark your calendar for the week starting March 21st and book your seat for a walk through all the exciting stuff we ship with the new release!
0
Peter
Top achievements
Rank 1
answered on 08 May 2011, 03:30 PM
Hello Tina,

The application sample is very useful. I tried to implement this in my project, but I wondered how/where you bind the ContextualTabs? If this is just not a part of the demo app, I want to know how this could be achieved anyhow.

Perhaps extending the demo would be interesting for more people out there.

Best regards,
Hans-Peter Schmidt
0
Tina Stancheva
Telerik team
answered on 11 May 2011, 07:19 PM
Hello Hans-Peter Schmidt,

I attached a sample project illustrating how to databind the ContextualTabs. However, please keep in mind that the current implementation of the RibbonBar has many known limitations in databinding scenarios. This is why we are currently working on a new implementation of the control - RibbonView. The RibbonView has the same API as the RibbonBar, but it will significantly improve the databinding and design-time support of the ribbon control as well as its performance. You will be able to give the new ribbon implementation a try in the upcoming Beta release so stay tuned for that.

Kind regards,
Tina Stancheva
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
Jonx
Top achievements
Rank 2
answered on 05 Oct 2011, 04:19 AM
I was trying to bind a RadRibbonCombobox to a RadRibbonButton CommandParameter which did not work just because I shold be using the RibbonView and NOT the RibbonBar which is buggy!

My code which is working in the RibbonView but not in the RibbonBar is:
<telerik:RadRibbonComboBox EmptyText="Format d'export" SelectedIndex="0" Name="cbxFormat" >
                                    <telerik:RadRibbonComboBoxItem Content="Fichier Excel" />
                                    <telerik:RadRibbonComboBoxItem Content="Fichier Csv" />
                                </telerik:RadRibbonComboBox>
                                <telerikRibbonView:RadRibbonButton Text="Exporter commande" SmallImage="/SoPratic.SL;component/Images/Export.png" SplitText="True" Name="btnExport"
                                                                  CommandParameter="{Binding ElementName=cbxFormat, Path=SelectedValue}"
                                                                  Command="{Binding ElementName=commandes, Path=ExportCommand}" />

It took my five hours to figure this out :(

John.
0
Tina Stancheva
Telerik team
answered on 07 Oct 2011, 02:51 PM
Hi John,

Indeed the RadRibbonBar control has many known limitations especially in databinding scenarios. This is why the RadRibbonView control was released - a new implementation of the ribbon UI but keeping pretty much the same API.

I am really sorry to hear that you have spent such a long time trying to use the RadRibbonBar. We are currently trying to popularize the RadRibbonView control as a replacement of the RadRibbonBar control. And we will definitely take your feedback into consideration and  discuss how we can prevent our users from hitting the same walls as you did and further spread the news of the new control and its features.

So thanks again for your feedback.

Best wishes,
Tina Stancheva
the Telerik team

Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

0
Jonx
Top achievements
Rank 2
answered on 08 Oct 2011, 02:36 PM
Hello Tina,
I have read here and there that they are "known limitations" but I was unable to find which they where...

So I see only two simple things to do:
- List the known limitations in a chapter "Known limitations" in the documentation of the RibbonBar
- Tell in the introduction of that control to use the RibbonView

Dead simple.
Thank you,
John.
0
Petar Mladenov
Telerik team
answered on 12 Oct 2011, 06:48 PM
Hi John,

As we replied in your other support ticket , we will update the RadRibbonBar documentation to list its known limitations and to point our customers to the new RadRibbonView control.

The updated documentation will go live next week. Thank you for your feedback again.

Best wishes,
Petar Mladenov
the Telerik team

Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

Tags
Buttons
Asked by
Tim
Top achievements
Rank 1
Answers by
Jim Daly
Top achievements
Rank 1
Tim
Top achievements
Rank 1
Ivan
Telerik team
Uri
Top achievements
Rank 1
Tina Stancheva
Telerik team
Peter
Top achievements
Rank 1
Jonx
Top achievements
Rank 2
Petar Mladenov
Telerik team
Share this question
or