Created
January 31, 2011 10:48
-
-
Save ldfallas/803888 to your computer and use it in GitHub Desktop.
test.xaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import clr | |
clr.AddReference("PresentationCore") | |
clr.AddReference("PresentationFramework") | |
clr.AddReference("WindowsBase") | |
clr.AddReference('GalaSoft.MvvmLight.WPF4.dll') | |
from System.Windows.Markup import XamlReader | |
from System.Windows import Application | |
from System.Windows import MessageBox | |
from System.IO import File | |
from System.Windows.Controls import TreeView | |
import System | |
import clrtype | |
from GalaSoft.MvvmLight import ViewModelBase | |
from GalaSoft.MvvmLight.Command import RelayCommand | |
from System.Collections.ObjectModel import ObservableCollection | |
class TestModel(ViewModelBase): | |
__metaclass__ = clrtype.ClrClass | |
def __init__(self): | |
self.name = 'algo' | |
self.root = NodeModel('x1',[NodeModel('y2',[NodeModel('z2',[])]), | |
NodeModel('y3',[])]) | |
self.sselected = NodeModel('???',[]) | |
@property | |
@clrtype.accepts() | |
@clrtype.returns(System.Object) | |
def selected(self): | |
print('rra ' ) | |
result = self.sselected | |
print('rra 2' ) | |
return result | |
@selected.setter | |
@clrtype.accepts(System.Object) | |
@clrtype.returns() | |
def selected(self, value): | |
print('xxx ') | |
self.sselected = value | |
#self.RaisePropertyChanged('selected') | |
print('3xxx') | |
@property | |
@clrtype.accepts() | |
@clrtype.returns(System.Object) | |
def Roots(self): | |
return [self.root] | |
@property | |
@clrtype.accepts() | |
@clrtype.returns(System.String) | |
def Label(self): | |
print('a') | |
return self.name | |
@Label.setter | |
@clrtype.accepts(System.String) | |
@clrtype.returns() | |
def Label(self, value): | |
print('b') | |
self.name = value | |
print('c') | |
self.RaisePropertyChanged('Label') | |
print('d') | |
class MenuItemOptionModel: | |
__metaclass__ = clrtype.ClrClass | |
def __init__(self,header, action): | |
self.header = header | |
self.action = action | |
@property | |
@clrtype.accepts() | |
@clrtype.returns(System.String) | |
def header_text(self): | |
return self.header | |
@property | |
@clrtype.accepts() | |
@clrtype.returns(System.Object) | |
def ctxt_action(self): | |
return self.action | |
class NodeModel: | |
__metaclass__ = clrtype.ClrClass | |
def __init__(self,label, initchildren): | |
self.children = ObservableCollection[System.Object](initchildren) | |
self.name = label | |
self.menu_items_col = [MenuItemOptionModel('One', RelayCommand(lambda: MessageBox.Show(self.name)))] | |
@property | |
@clrtype.accepts() | |
@clrtype.returns(System.Object) | |
def Label(self): | |
return self.name | |
@property | |
@clrtype.accepts() | |
@clrtype.returns(System.Object) | |
def menu_items(self): | |
return self.menu_items_col | |
@property | |
@clrtype.accepts() | |
@clrtype.returns(System.Object) | |
def Children(self): | |
return self.children | |
xamlFile = File.OpenRead('test.xaml') | |
window = XamlReader.Load(xamlFile) | |
window.DataContext = TestModel() | |
xamlFile.Close() | |
Application().Run(window) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Windows.Markup; | |
using System.Windows; | |
using System.Windows.Controls; | |
using System.IO; | |
using GalaSoft.MvvmLight; | |
using System.Collections.ObjectModel; | |
namespace Langexplr | |
{ | |
public static class TreeViewSelectedBehavior | |
{ | |
public static readonly DependencyProperty MySelectedProperty = | |
System.Windows.DependencyProperty.RegisterAttached( | |
"MySelected", | |
typeof(object), | |
typeof(TreeViewSelectedBehavior) | |
); | |
public static object GetMySelected(TreeView t) | |
{ | |
System.Console.WriteLine("1z"); | |
return t.GetValue(MySelectedProperty); | |
System.Console.WriteLine("1z"); | |
} | |
public static void SetMySelected(TreeView t, object theValue) | |
{ | |
System.Console.WriteLine("1y"); | |
t.SetValue(MySelectedProperty, theValue); | |
System.Console.WriteLine("1y"); | |
} | |
public static readonly DependencyProperty SelectedHelperProperty = | |
System.Windows.DependencyProperty.RegisterAttached( | |
"SelectedHelper", | |
typeof(TreeViewSelectedHelper), | |
typeof(TreeViewSelectedBehavior), | |
new UIPropertyMetadata(null,OnSelectedHelperChanged) | |
); | |
public static TreeViewSelectedHelper GetSelectedHelper(TreeView t) | |
{ | |
return (TreeViewSelectedHelper)t.GetValue(SelectedHelperProperty); | |
} | |
public static void SetSelectedHelper(TreeView t, | |
TreeViewSelectedHelper theValue) | |
{ | |
t.SetValue(SelectedHelperProperty, theValue); | |
} | |
static void OnSelectedHelperChanged( | |
DependencyObject depObj, | |
DependencyPropertyChangedEventArgs e) | |
{ | |
System.Console.WriteLine("1x"); | |
((TreeViewSelectedHelper)e.NewValue).Register((TreeView)depObj); | |
System.Console.WriteLine("2x"); | |
} | |
} | |
public class TreeViewSelectedHelper | |
{ | |
public TreeViewSelectedHelper() {System.Console.WriteLine("Created"); } | |
void SelectedItemChanged(object sender, | |
RoutedPropertyChangedEventArgs<object> args) | |
{ | |
System.Console.WriteLine("1"); | |
(sender as TreeView).SetValue(TreeViewSelectedBehavior.MySelectedProperty,((sender as TreeView)).SelectedItem); | |
System.Console.WriteLine("2"); | |
} | |
public void Register(TreeView t) | |
{ | |
t.SelectedItemChanged += SelectedItemChanged; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment