代码片段
|
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