IronPython与WPF:将复选框的IsChecked属性绑定到类成员变量

3 投票
1 回答
2133 浏览
提问于 2025-04-16 04:58

我看到很多类似的问题,都是关于如何让复选框的数据绑定正常工作,但我看到的所有例子都是用C#写的,我却不知道怎么把它转换成IronPython。我在窗口中定义了一个复选框,如下所示:

<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>

我希望当下面这个类中的self.o1checked被切换时,它的IsChecked值能够自动更新:

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

(那个ui对象是一个类,它把xaml加载成一个包含用户界面控件的字典。你可以在这里查看)

那么我该怎么做呢?在花了几个小时阅读MSDN的绑定文档(也是全C#的)后,我尝试添加了这个:

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)

虽然它没有工作,但看起来至少有点道理。我是不是在正确的方向上?

1 个回答

3

这个属性应该使用INotifyPropertyChanged接口。你可以查看我的博客,里面有关于如何在IronPython中实现它的例子。

另外,请注意在.NET或IronPython中有一个Silverlight的bug,这个bug会导致当除了字符串以外的其他类型的数据需要传回视图模型时出现错误。

撰写回答