2-Way databinding to a RibbonTextBox using WPF

<?xml encoding=”UTF-8″>By Balaji Ramamoorthy

To have a RibbonTextBox automatically update your data when the user updates the ribbon textbox and vice-versa, you can use the RibbonTextBox.TextValueBinding to establish a 2-way databinding. Here is a sample code :

 <span>public</span><span>  <span>class</span><span>  ManufacturerData </span></span>
 	: System.ComponentModel.INotifyPropertyChanged
 <span>{</span>
     <span>private</span><span>  string manufacturerName;</span>
 
     <span>public</span><span>  ManufacturerData() <span>{</span> <span>}</span></span>
 
     <span>public</span><span>  ManufacturerData(String manufacturer)</span>
     <span>{</span>
         manufacturerName = manufacturer;
     <span>}</span>
 
     <span>public</span><span>  String ManufacturerProperty</span>
     <span>{</span>
         get <span>{</span> <span>return</span><span>  manufacturerName; <span>}</span></span>
         set
         <span>{</span>
             manufacturerName = value;
             OnPropertyChanged(<span>"ManufacturerProperty"</span><span> );</span>
         <span>}</span>
     <span>}</span>
 
     <span>public</span><span>  <span>event</span><span>  </span></span>
 		System.ComponentModel.
 		PropertyChangedEventHandler PropertyChanged;
 
     <span>private</span><span>  <span>void</span><span>  OnPropertyChanged(string info)</span></span>
     <span>{</span>
         System.ComponentModel.PropertyChangedEventHandler 
 			handler = PropertyChanged;
         <span>if</span><span>  (handler != null)</span>
         <span>{</span>
             handler(<span>this</span><span> , <span>new</span><span>  System.ComponentModel.</span></span>
 				PropertyChangedEventArgs(info));
         <span>}</span>
     <span>}</span>
 <span>}</span>
 
 <span>public</span><span>  <span>class</span><span>  Commands </span></span>
 <span>{</span>
     <span>public</span><span>  <span>static</span><span>  ManufacturerData _data </span></span>
 		= <span>new</span><span>  ManufacturerData(<span>"Autodesk"</span><span> );</span></span>
     <span>public</span><span>  <span>static</span><span>  <span>bool</span><span>  _added = <span>false</span><span> ;</span></span></span></span>
 
     [CommandMethod(<span>"RTB"</span><span> )]</span>
     <span>static</span><span>  <span>public</span><span>  <span>void</span><span>  RibbonTextBoxMethod()</span></span></span>
     <span>{</span>
         <span>if</span><span>  (!_added)</span>
         <span>{</span>
             Autodesk.Windows.RibbonControl rc 
 				= Autodesk.Windows.ComponentManager.Ribbon;
             Autodesk.Windows.RibbonTab rt = null;
             foreach (Autodesk.Windows.RibbonTab tab 
 												in rc.Tabs)
             <span>{</span>
                 <span>if</span><span>  (tab.AutomationName.Equals(<span>"Add-ins"</span><span> ))</span></span>
                 <span>{</span>
                     rt = tab;
                     <span>break</span><span> ;</span>
                 <span>}</span>
             <span>}</span>
             <span>if</span><span>  (rt == null)</span>
                 <span>return</span><span> ;</span>
 
             Autodesk.Windows.RibbonPanelSource rps 
 				= <span>new</span><span>  Autodesk.Windows.RibbonPanelSource();</span>
             rps.Title = <span>"MyPanel"</span><span> ;</span>
             Autodesk.Windows.RibbonPanel rp 
 				= <span>new</span><span>  Autodesk.Windows.RibbonPanel();</span>
             rp.Source = rps;
             rt.Panels.Add(rp);
 
             Autodesk.Windows.RibbonTextBox rtb 
 				= <span>new</span><span>  Autodesk.Windows.RibbonTextBox();</span>
             rtb.Id = <span>"MyRTB"</span><span> ;</span>
             rtb.Text = <span>"Manufacturer"</span><span> ;</span>
             rtb.ShowText = <span>true</span><span> ;</span>
             rps.Items.Add(rtb);
             rt.IsActive = <span>true</span><span> ;</span>
 
             System.Windows.Data.Binding myBinding 
 				= <span>new</span><span>  System.Windows.Data.Binding</span>
 				(<span>"ManufacturerProperty"</span><span> );</span>
             myBinding.Source = _data;
             myBinding.Mode 
 				= System.Windows.Data.BindingMode.TwoWay;
             rtb.TextValueBinding = myBinding;
 
             _added = <span>true</span><span> ;</span>
         <span>}</span>
     <span>}</span>
 <span>}</span>
 


Comments

One response to “2-Way databinding to a RibbonTextBox using WPF”

  1. Hi Balaji,
    Thanks for the post.
    I want to evolve this example to use an ObservableCollection and bind it to a RibbonCombo.
    I’ve got as far as the combo does contain objects but does not display a single property for example the name. I’ve tried setting the path nut the binding fails completely; no objects appear in the combo.
    Is there another example elsewhere that demonstrates this?
    Thanks

Leave a Reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading