IronPython & WPF: Binding a checkbox's IsChecked property to a class member variable

旧巷老猫 提交于 2019-12-06 06:28:55

问题


I've seen many similar questions on how to get data binding working with a checkbox, but all 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:

<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">
    <DockPanel>     
        <CheckBox Name="bindtest" IsChecked="{Binding Path=o1checked, Mode=OneWay}"></CheckBox>
        <Button Content="Toggle" Name="Toggle" Padding="5"></Button>
    </DockPanel>
</Window>

And I want its IsChecked value to automatically update when self.o1checked is toggled in the following class:

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

(That ui object is a class that has the xaml loaded into it as a dictonary of ui controls. See here)

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:

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)

It doesn't work, but it seems like it makes at least some sense. Am I on the right track?


回答1:


The property should use INotifyPropertyChanged interface. See my blog for an example how to implement it in IronPython.

Also note there is a Silverlight bug in .NET or IronPython causing an error when anything else than string should be propagated back into viewmodel.



来源:https://stackoverflow.com/questions/3856905/ironpython-wpf-binding-a-checkboxs-ischecked-property-to-a-class-member-vari

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!