I am still trying to figure out how to implement WPF MVVM with
Python.Net.Previously, I have successfully used System.Dynamic.ExpandoObject as
a ViewModel container
self.window =
System.Windows.Markup.XamlReader.Load(outStream)self.window.DataContext =
DotNetExpandoObject()
where DotNetExpandoObject is a wrapper class for System.Dynamic.ExpandoObject
class DotNetExpandoObject(System.Dynamic.ExpandoObject):... in which I
redefined __getattr__ and __setattr__
it works flawlessly as System.Dynamic.ExpandoObject implements
INotifyPropertyChange interface already
Now, I would like to get away from using System.Dynamic.ExpandoObject but to
implement my own
I first tried to expose a python class back to .Netclass
MyViewModel(System.Object): __namespace__ = "WPFPyDemo" def
__init__(self): super(MyViewModel,self).__init__()
self._inputText = "Line - in" @clr.clrproperty(str) def inputText(self):
return self._inputText @inputText.setter def inputText(self,value):
self._inputText = value self.OnPropertyChanged("inputText")
self.window.DataContext = MyViewModel()
The one direction data binding works fine, and the "Line - in" text correctly
shows up in the textblock control.obviously this is not sufficient as there is
no INotifyPropertyChange interface.
So, I inherit the interface , and tries to implement the typical C# code"
public event PropertyChangedEventHandler PropertyChanged"
-- not sure how to handle event in Python.Net, the follow code probably is
completely wrong
class ViewModel(System.ComponentModel.INotifyPropertyChanged): __namespace__
= "WPFPy" def __init__(self): super(ViewModel, self).__init__()
self.PropertyChanged = System.ComponentModel.PropertyChangedEventHandler
def OnPropertyChanged(self, propertyName): if self.PropertyChanged !=
None: PropertyChanged(self,
System.ComponentModel.PropertyChangedEventArgs(propertyName))
class MyViewModel(ViewModel): __namespace__ = "WPFPyDemo" def
__init__(self): super(MyViewModel,self).__init__()
self._inputText = "Line - in"
@clr.clrproperty(str) def inputText(self): return self._inputText
@inputText.setter def inputText(self,value): self._inputText =
value self.OnPropertyChanged("inputText")
The process terminates due to StackOverflowException. Looks like the error
happens when WFP recoganized INotifyPropertyChange interface and tries to
access MyViewModel class via it.
_________________________________________________
Python.NET mailing list - [email protected]
https://mail.python.org/mailman/listinfo/pythondotnet