【问题标题】:IronPython & WPF: Binding a checkbox's IsChecked property to a class member variableIronPython & WPF:将复选框的 IsChecked 属性绑定到类成员变量
【发布时间】:2010-10-04 15:55:59
【问题描述】:

我已经看到很多类似的问题,关于如何使用复选框进行数据绑定,但是我看到的所有示例都是在 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>

我希望它的 IsChecked 值在 self.o1checked 在以下类中切换时自动更新:

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 作为 ui 控件字典加载到其中的类。请参阅here

那么我该如何实现呢?经过数小时阅读 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)

它不起作用,但它似乎至少有一些意义。我在正确的轨道上吗?

【问题讨论】:

    标签: python wpf visual-studio-2010 binding ironpython


    【解决方案1】:

    该属性应使用 INotifyPropertyChanged 接口。有关如何在 IronPython 中实现它的示例,请参阅我的 blog

    另请注意,.NET 或 IronPython 中的 Silverlight bug 在应将字符串以外的任何内容传播回视图模型时会导致错误。

    【讨论】:

    • 好的,这花了我整整一周的时间,并多次尝试消化/理解/实施/测试,但我终于有了类似的工作,尽管我使用的是你在你的文章中提到的 __setattr__ 方法暂时写博客。感谢您发布它!一旦我解决了我的错误,我将发布我的一些代码来展示我是如何做到的。主要涉及从INotifyPropertyChanged接口继承并在__setattr__内部调用self._OnPropertyChanged,每当我需要告诉gui绑定从源更新其绑定目标时。
    • 嗯,你在__setter__ 中所做的正是@notify_property 装饰器所做的。如果您发布代码,我可以尝试修复它。
    猜你喜欢
    • 2012-04-12
    • 2015-03-28
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2015-05-19
    • 2020-11-16
    相关资源
    最近更新 更多