代码片段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 |
<UserControl xmlns:sdk= "http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
x:Class= "LightSwitchApplication.TreeViewControl.DepartmentTreeViewControl" xmlns:local= "clr-namespace:LightSwitchApplication.TreeViewControl" mc:Ignorable= "d" d:DesignHeight= "300"
d:DesignWidth= "400" > <UserControl.Resources> <local:EntityCollectionValueConverter x:Key= "EntityCollectionValueConverter"
/> </UserControl.Resources> <Grid x:Name= "LayoutRoot"
Background= "White" > <StackPanel Orientation= "Horizontal" > <sdk:TreeView Name= "treeViewControl"
SelectedItemChanged= "treeViewControl_SelectedItemChanged"
ItemsSource= "{Binding Screen.DepartmentTree}" > <sdk:TreeView.ItemTemplate> <sdk:HierarchicalDataTemplate ItemsSource="{Binding Converter={StaticResource EntityCollectionValueConverter}, ConverterParameter=Children}"> <StackPanel Orientation= "Horizontal" > <!--<CheckBox IsChecked= "{Binding IsSelected, Mode=TwoWay}" />--> <TextBlock Text= "{Binding Path=Name, Mode=TwoWay}" Margin= "5,0"
Width= "74"
/> </StackPanel> </sdk:HierarchicalDataTemplate> </sdk:TreeView.ItemTemplate> </sdk:TreeView> </StackPanel> </Grid> </UserControl> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 |
using
Microsoft.LightSwitch.Framework.Client; using
Microsoft.LightSwitch.Presentation; using
System; using
System.Collections.Generic; using
System.Linq; using
System.Net; using
System.Windows; using
System.Windows.Controls; using
System.Windows.Documents; using
System.Windows.Input; using
System.Windows.Media; using
System.Windows.Media.Animation; using
System.Windows.Shapes; namespace
LightSwitchApplication.TreeViewControl { public
partial class DepartmentTreeViewControl : UserControl { public
DepartmentTreeViewControl() { InitializeComponent(); } private
void treeViewControl_SelectedItemChanged( object
sender, RoutedPropertyChangedEventArgs< object > e) { var
selectItem = (LightSwitchApplication.Department)treeViewControl.SelectedItem; var
type1 = selectItem.GetType(); var
context = (IContentItem) this .DataContext; var
screen = context.Screen; var
data = (VisualCollection<LightSwitchApplication.Department>)screen.Details.Properties[ "DepartmentTree" ].Value; data.SelectedItem = selectItem; //data.text= selectItem.Details.Properties["Id"].Value; } } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 |
using
Microsoft.LightSwitch; using
System; using
System.Collections.Generic; using
System.Collections.ObjectModel; using
System.Diagnostics; using
System.Net; using
System.Windows; using
System.Windows.Controls; using
System.Windows.Data; using
System.Windows.Documents; using
System.Windows.Ink; using
System.Windows.Input; using
System.Windows.Media; using
System.Windows.Media.Animation; using
System.Windows.Shapes; namespace
LightSwitchApplication.TreeViewControl { public
class EntityCollectionValueConverter : IValueConverter { public
object Convert( object
value, Type targetType, object
parameter, System.Globalization.CultureInfo culture) { string
strErrorMessage = "Converter parameter should be set to the property name that will serve as source of data" ; IEntityObject entity = value as
IEntityObject; if
(entity == null ) throw
new ArgumentException( "The converter should be using an entity object" ); string
sourcePropertyName = parameter as
string ; if
( string .IsNullOrWhiteSpace(sourcePropertyName)) throw
new ArgumentException(strErrorMessage); // Enumerate the source property using logic dispatcher // and prepare the collection of entities that the control will bind to var
entities = new
ObservableCollection<IEntityObject>(); var
temporaryEntites = new
List<IEntityObject>(); entity.Details.Dispatcher.BeginInvoke( delegate { IEntityCollection eCollection = entity.Details.Properties[sourcePropertyName].Value as
IEntityCollection; if
(eCollection == null ) { Debug.Assert( false , "The property "
+ sourcePropertyName + " is not an entity collection" ); return ; } // Now we are on the logic thread. We cannot just stuff the observable collection // with entities because the collection will immediately raise Changed events // and this will result in invalid cross-thread access. So we‘ll use a temporary collection // and copy the entites again on the UI thread foreach
(IEntityObject e in
eCollection) { temporaryEntites.Add(e); } Microsoft.LightSwitch.Threading.Dispatchers.Main.BeginInvoke( delegate { // I wish ObservableCollection had an AddRange() method... foreach
(IEntityObject e in
temporaryEntites) { entities.Add(e); } }); }); return
entities; } public
object ConvertBack( object
value, Type targetType, object
parameter, System.Globalization.CultureInfo culture) { throw
new NotImplementedException(); } } } |
lightswitch 添加 TreeView 控件,布布扣,bubuko.com
原文:http://www.cnblogs.com/neozhu/p/3692003.html