2011-07-04 6 views
1

확인란을 선택하면 문자열 값이 변경됩니다. 확인란을 선택하거나 선택 취소하면 문자열 값이 변경됩니다. 나는 (내 체크 박스로 CheckAll과)이 있습니다IronPython의 문자열에 체크 박스를 바인딩합니다.

class MyWindow(Window): 
    def __init__(self): 
     wpf.LoadComponent(self, 'BioApp1.xaml') 
     openDialog = SequenceFileOperations() 
     self.Sequences = openDialog.Open() 
     object = MyObjects(self.Sequences) 
     self.CheckAll.DataContext = object 
     self.IDLabel.DataContext = object 


class MyObjects(object): 
    def __init__(self, Sequences): 
     self.CurrentSeq = Sequences[0] 
     self.ID = self.CurrentSeq.ID 

<Label Height="28" HorizontalAlignment="Left" Margin="152,221,0,0" VerticalAlignment="Top" Width="98" Name="IDLabel" Content="{Binding Path=ID}"/> 

내가 체크 박스에 체크 표시를하지 않은 경우에는 레이블이 시퀀스 ID를 표시해야합니다,하지만은, 체크되는 경우 단순히 "All"을 표시해야합니다. 이를 위해 CurrentSeq의 ID 속성을 "All"로 변경해야합니다. 데이터 바인딩으로 어떻게 할 수 있습니까? 내가 할 수있는 다른 방법이 있습니까?

편집 : 나는 정말 바보 같지만 작동시키지 못합니다. getter/setter 사용에 대한 제안을 따르려고했지만 충분히 모를 것 같습니다. 좀 더 복잡한 작업을하기 전에 확인란을 선택하고 선택을 취소 할 때 버튼을 비활성화하면 버튼을 비활성화하기 만하면됩니다.

class MyWindow(Window): 
    def __init__(self): 
    wpf.LoadComponent(self, 'App1.xaml') 
    object = BindingClass(self.Check, self.PreviousBtn) 
    self.PreviousBtn.DataContext = object 

class BindingClass(object): 
    def __init__(self, Check, PreviousBtn): 
     self.Check = Check 
     self.PreviousBtn = PreviousBtn 

    def GetEnabledConverter(self): 
     if self.CheckAll.IsChecked: 
      return self.PreviousBtn.IsEnabled 

    def SetEnabledConverter(self): 
     if self.CheckAll.IsChecked: 
      self.PreviousBtn.IsEnabled = False 
     else: 
      self.PreviousBtn.IsEnabled = True 

    EnabledConverter = property(GetEnabledConverter, SetEnabledConverter) 

그리고 :

<Button Content="Previous" IsEnabled="{Binding Path=EnabledConverter}" /> 

불행하게도 오류하지만 중 아무 효과가 없습니다를이 내가 쓴 것입니다. 코드는 아무 것도하지 않습니다. 네가 나를 도울 수 있다면 정말 고마워.

EDIT2 :

class MyWindow(Window): 
    def __init__(self): 
     wpf.LoadComponent(self, 'Test.xaml') 
     c = Converters(self.check1, self.Button) 
     self.Button.DataContext = c 

class Converters(NotifyPropertyChangedBase): 
    def __init__(self, check, button): 
     super(Converters, self).__init__() 
     self.Check = check 
     self.Button = button 


    @notify_property 
    def ButtonEnabled(self): 
     return self.Button.IsEnabled 

    @ButtonEnabled.setter 
    def ButtonEnabled(self): 
     if self.Check.IsChecked: 
      self.Button.IsEnabled = False 
     else: 
      self.Button.IsEnabled = True 

여전히 같은 결과 : 다음 notify_property를 사용하여, 나는이 시도하지 영향을. 나는 그 문제가 어디 있는지 이해할 수 없다.

답변

1

Converter을 사용합니다.

편집 :

당신은 파이썬에서 컨버터를 구현할 수 있습니다 내가 IronPython의에 WPF와 함께 일

class BoolToVisibilityConverter(IValueConverter): 

    def Convert(self, value, targetType, parameter, culture): 
     return Visibility.Visible if value != val else Visibility.Collapsed 

마지막으로, 당신은 .xaml에서 직접 사용할 수 없습니다. 2.7에서 개선되었는지 확실하지 않습니다.

또 다른 가능성은 setter/getter에 변환 (converted_ID)을 수행하는 다른 속성을 추가하는 것입니다. 코드가 한 곳에 있기 때문에 그것에 대해 더 생각하면, 나는 이것을 할 것입니다.

편집 2 :

가 있는지 확인합니다, 당신은 notify_property 대신 고전 파이썬 재산을 사용하고 있습니다.

+0

맞아,하지만 파이썬에서 코드를 원해. 파이썬에서 IValueConvertor와 비슷한 것이 있습니까? – user828647

+0

죄송합니다. 여전히이 문제를 해결할 수 없습니다 (위 편집 참조). IValueConverter를 사용하기로 결정했다면 xaml을 변경해야합니까? – user828647

+0

일반 Python 속성을 사용할 수 없습니다. .NET CLR에서는 표시되지 않습니다. 내 [notify_property] 사용 (http://gui-at.blogspot.com/2009/11/inotifypropertychanged-and-databinding.html) –

관련 문제