1)視圖層后臺代碼,很簡潔,主要是處理視圖模型的創建,當然,如果你利用一些技術,這里是可以不需要代碼的。不過我的觀點是任何事情都不要搞成潔癖,如果頁面的所有控制都放在視圖模型層,反而會使得視圖模型層最后就變成了視圖的后臺代碼,那么這個MVVM模式就失去了意義。
~~~
using MEntities;
using RIAServices.Web;
using System.Threading;
using System.Dynamic;
using System.Windows.Data;
using MAppStructure.ViewModel;
namespace MAppStructure
{
??
?? public partial class MainPage : UserControl
?? {
?????? public DynamicDataViewModel ViewModel
?????? {
?????????? get {
?????????????? return this.DataContext as DynamicDataViewModel;
?????????? }
?????????? set{
?????????????? this.DataContext = value;
?????????? }
?????? }
?????? public MainPage()
?????? {
?????????? InitializeComponent();
???????????//也可以通過其它方式進行構建。在簡單應用中,這個文件就基本不用自己寫代碼了。
?????? this.ViewModel = new DynamicDataViewModel();
?????? }
~~~
2)頁面綁定.
~~~
<sdk:DataGrid x:Name="CustomGrid" ItemsSource="{Binding Path=DataTable.Rows}" Grid.Row="1" AutoGenerateColumns="False" >
?????????? <sdk:DataGrid.Columns>
?????????????? <sdk:DataGridTextColumn CanUserReorder="True" Binding="{Binding Path=[EmployeeID].Value,Mode=OneWay}" CanUserResize="True" CanUserSort="True" Width="Auto" />
?????????????? <sdk:DataGridTextColumn CanUserReorder="True" Binding="{Binding Path=[EmployeeName].Value,Mode=OneWay}" CanUserResize="True" CanUserSort="True" Width="Auto" />
?????????????? <sdk:DataGridTextColumn CanUserReorder="True" Binding="{Binding Path=[EmployeeDesc].Value,Mode=OneWay}" CanUserResize="True" CanUserSort="True" Width="Auto" />
?????????????? <sdk:DataGridTextColumn CanUserReorder="True" Binding="{Binding Path=[EmployeeAge].Value,Mode=OneWay}" CanUserResize="True" CanUserSort="True" Width="Auto" />
?????????? </sdk:DataGrid.Columns>
?????? </sdk:DataGrid>
~~~
注意上面的綁定方式和路徑語法。
~~~
<Button Content="查詢" Command="{Binding Path=Commands[Button1Command]}" CommandParameter="{Binding ElementName=CustomGrid,Path=SelectedItem}"? Grid.Row="2" Height="23" HorizontalAlignment="Left" Margin="344,160,0,0" Name="Search" ?VerticalAlignment="Center" Width="75"/>
~~~
這中命令處理模式,稍微改進一下,就可以做成自動動態綁定,比一個個定義命令的方式要好很多,有利于維護的集中處理。
到此為止,這個系列就完成了,上面代碼都是經過測試的,實際運行的。只是如果你的數據量比較大的話,需要修改服務端Web.Config的配置,增大可序列化對象的最大數。相關問題處理可上網搜,很多的。另外消息機制也可以采用,這個可以利用微軟的輕量級框架去做,但切勿爛用。
PS:希望大家多提意見,如有更好的方法希望能不吝賜教。