标签:
有时候,我们在封闭的环境中做开发工作,并没有那么多便捷的开发工具,只能利用当前系统自带的基本工具做开发,
比如利用强大的framework,而powershell就是很好的开发工具,在不安装visual studio的情况下,就能实现大部分功能。
下面就用一个简单的例子来实现WPF中ListBox 数据源的绑定
1.关于dataset,我就不做多解释了,简单来说,就是一个或多个DataTable 对象的集合。
用powershell来实现的话,是简单不过的事情了。
#Create Table object
$table = New-Object System.Data.Datatable "newtable"
$dataset = New-Object System.Data.DataSet
#Define Columns
$col1 = New-Object system.Data.DataColumn "ContactName",([string])
$col2 = New-Object system.Data.DataColumn "Address",([string])
$col3 = New-Object system.Data.DataColumn "City",([string])
$col4 = New-Object system.Data.DataColumn "Country",([string])
#Add the Columns
$table.columns.add($col1)
$table.columns.add($col2)
$table.columns.add($col3)
$table.columns.add($col4)
#Create a row
foreach($k in 1..5){
$row = $table.NewRow()
$row.ContactName = "ContactName$k"
$row.Address = "Address$k"
$row.City = "City$k"
$row.Country = "Country$k"
$table.Rows.Add($row)
}
$dataset.merge($table)
这样dataset对象就生成好了
2.新建MainWindow.xaml文件,就简单放一个UI元素ListBox和控件模板。
注意ItemsSource就是绑定dataset的一个newtable表。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Window" Title="DataGridWindow" Height="300" Width="400" >
<Window.Resources>
<DataTemplate x:Key="listBoxTemplate">
<StackPanel Margin="3">
<DockPanel >
<TextBlock FontWeight="Bold" Text="Name:"
DockPanel.Dock="Left"
Margin="5,0,10,0"/>
<TextBlock Text=" " />
<TextBlock Text="{Binding ContactName}" Foreground="Green" FontWeight="Bold" />
</DockPanel>
<DockPanel >
<TextBlock FontWeight="Bold" Text="Address:" Foreground ="DarkOrange"
DockPanel.Dock="Left"
Margin="5,0,5,0"/>
<TextBlock Text="{Binding Address}" />
<TextBlock Text=", " />
<TextBlock Text="{Binding City}" />
<TextBlock Text=", " />
<TextBlock Text="{Binding Country}" />
</DockPanel>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox Margin="17,8,15,26" Name="listBox1"
ItemsSource="{Binding newtable}" ItemTemplate="{StaticResource listBoxTemplate}" />
</Grid>
</Window>
3.接着就开始整合一下,主要是给listbox的上下文赋值。
$xaml = [xml](Get-Content MainWindow.xaml)
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Window=[Windows.Markup.XamlReader]::Load( $reader )
$listBox1 = $Window.FindName("listBox1")
$listBox1.DataContext = $dataset
$Window.Showdialog() | Out-Null
好了,这样就应该可以了。
不过在运行之前,先判断一下是不是在sta mode下运行的,因为运行GUI是要在sta模式下运行的
$host.Runspace.ApartmentState -eq ‘STA‘
如果不是的话,加上powershell -sta就可以了。
我是这么运行的,新建start.bat,里面的内容powershell -sta。
双击之后,然后如下操作
得到如下结果
利用Powershell快速对WPF的ListBox 数据源的绑定
标签:
原文地址:http://www.cnblogs.com/torrysen/p/4621190.html