title: IronPython & WPF: Binding a checkbox's IsChecked property to a class member variable
body: <p>I've seen many similar questions on how to get data binding working with a checkbox, but <strong>all</strong> of the examples I've seen are in C# and I can't seem to make the leap to convert it to IronPython. I have a checkbox defined in a window thusly:</p>
  
  <pre><code>&lt;Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          Name="Test" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"&gt;
      &lt;DockPanel&gt;     
          &lt;CheckBox Name="bindtest" IsChecked="{Binding Path=o1checked, Mode=OneWay}"&gt;&lt;/CheckBox&gt;
          &lt;Button Content="Toggle" Name="Toggle" Padding="5"&gt;&lt;/Button&gt;
      &lt;/DockPanel&gt;
  &lt;/Window&gt;
  </code></pre>
  
  <p>And I want its IsChecked value to automatically update when <code>self.o1checked</code> is toggled in the following class:</p>
  
  <pre><code>class MaikoCu64(object):
      def __init__(self):
          self.o1checked = False
          ui.win['Button']['Toggle'].Click += self.Toggle_OnClick
  
      def Toggle_OnClick(self, sender, event):
          self.o1checked = not self.o1checked
  </code></pre>
  
  <p>(That <code>ui</code> object is a class that has the xaml loaded into it as a dictonary of ui controls. See <a href="http://www.ironpython.info/index.php/XAML_GUI_Events_Example" rel="nofollow">here</a>)</p>
  
  <p>So how do I make this happen? After hours of reading through the MSDN binding documentation (also all in C#) I've tried adding this:</p>
  
  <pre><code>import System
  myBinding = System.Windows.Data.Binding("o1checked")
  myBinding.Source = self
  myBinding.Mode = System.Windows.Data.BindingMode.OneWay
  ui.win['CheckBox']['bindtest'].SetBinding(System.Windows.Controls.CheckBox.IsCheckedProperty, myBinding)
  </code></pre>
  
  <p>It doesn't work, but it seems like it makes at least some sense. Am I on the right track?</p>