2010-10-04 42 views
2

我見過很多類似的問題,關於如何使用複選框來獲取數據綁定,但我看過的示例中的全部都在C#中我似乎無法將其轉換爲IronPython。我在正是如此一個窗口中定義一個複選框:IronPython&WPF:將複選框的IsChecked屬性綁定到類成員變量

<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中作爲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) 

它不工作,但現在看來似乎使至少一些感覺。我在正確的軌道上嗎?

回答

3

該屬性應該使用INotifyPropertyChanged接口。有關如何在IronPython中實現它的示例,請參見我的blog

另請注意,在.NET或IronPython中有Silverlight bug會導致錯誤,除字符串之外的任何內容都應傳播回viewmodel。

+1

好吧,這花了我整整一週的時間和許多試圖消化/理解/實現/測試,但我終於有類似的工作,雖然我使用'__setattr__'方法你在你的博客中提到現在。感謝您發佈它!一旦我解決了我的錯誤,我會發布我的一些代碼來展示我是如何做到的。主要涉及繼承'INotifyPropertyChanged'接口,並在'__setattr__'中調用'self._OnPropertyChanged',每當我需要告訴gui綁定從源更新綁定目標時。 – Aphex 2010-10-08 18:38:01

+1

那麼,'__setter__'中的內容正是'@ notify_property'裝飾器所做的。如果您發佈代碼,我可以嘗試修復它。 – 2010-10-09 08:13:57

相關問題