我看到很多类似的问题,关于如何让数据绑定与复选框一起工作,但是所有我看到的例子都是用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)
它没有起作用,但似乎至少有些道理。我走在正确的轨道上吗?
__setattr__
方法。谢谢你的发布!一旦我解决了我的错误,我会发布一些我的代码来展示我是如何做到的。主要涉及从INotifyPropertyChanged
接口继承并在需要告诉GUI绑定从源更新其绑定目标时,在__setattr__
内调用self._OnPropertyChanged
。 - Aphex__setter__
中所做的正是@notify_property
装饰器所做的事情。如果您发布您的代码,我可以尝试修复它。 - Lukas Cenovsky