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

3

我看到很多类似的问题,关于如何让数据绑定与复选框一起工作,但是所有我看到的例子都是用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对象是一个类,其中包含作为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错误

1
好的,这个花了我整整一周和多次尝试去理解、实现和测试,但是我终于有了类似的东西在运行,虽然我现在正在使用你在博客中提到的__setattr__方法。谢谢你的发布!一旦我解决了我的错误,我会发布一些我的代码来展示我是如何做到的。主要涉及从INotifyPropertyChanged接口继承并在需要告诉GUI绑定从源更新其绑定目标时,在__setattr__内调用self._OnPropertyChanged - Aphex
1
好的,在__setter__中所做的正是@notify_property装饰器所做的事情。如果您发布您的代码,我可以尝试修复它。 - Lukas Cenovsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接