MVVM模式結合MVVMlight架構的應用
代碼下載
程式=資料結構+演算法
物件導向=對象+對象之間關係
1.以資料為中心的開發方式。
1)Model:定義一個資料結構。
關鍵代碼:實現介面INotifyPropertyChanged
2)ViewModel:定義演算法操作資料結構(資料集合,增加,刪除,修改,查詢)
關鍵代碼:繼承ViewModelBase
定義一個集合ObservableCollection<c401xmmc> C401xmmcs
3)View:資料的一種展現形式。(查詢,新增,修改,刪除)
互動。事件通知,
Messenger.Default.Unregister(this);
OKButtonCommand = new RelayCommand<c401xmmc>(OKButtonClick);//傳遞命令
先註冊,後應用。
註冊:
Messenger.Default.Register<String>(
this,
"Home2",
msg =>
{
CreateC401xmmc newCustomer = new CreateC401xmmc();
newCustomer.Title = msg;
newCustomer.Show();
});
發送命令:
Messenger.Default.Send("建立1", "Home2");
MVVMlight中封裝的是多播。(觀察者設計模式)
介面互動通關過註冊命令處理。
以一個介面為主,其他介面是此介面的輔助。(利用主介面的ViewModel)
2.介面都是通過綁定展現資料。
主介面關鍵代碼
1)前台View
<Grid.DataContext>
<vm:HomeViewModel />
</Grid.DataContext>
<Button Content="新增" Width="120" Height="30" Command="{Binding CreateCommand}" ></Button>
<sdk:DataGrid AutoGenerateColumns="True" Grid.Row="1"
HorizontalAlignment="Stretch"
ItemsSource="{Binding Path=C401xmmcs}"
Margin="20,10,20,10" Name="dataGrid1"
VerticalAlignment="Stretch" />
2)後台ViewModel
public RelayCommand CreateCommand { get; private set; }
CreateCommand = new RelayCommand(Create); //CreateCommand綁定到Create處理函數
Create函數中
Messenger.Default.Send("建立1", "Home2");
因為前面註冊:
Messenger.Default.Register<String>(
this,
"Home2",
msg =>
{
CreateC401xmmc newCustomer = new CreateC401xmmc();
newCustomer.Title = msg;
newCustomer.Show();
});
錄入資料介面,確定儲存
1)前台View
<Grid.DataContext>
<vm:HomeViewModel />
</Grid.DataContext>
<TextBox Grid.Row="0" Grid.Column="1" Height="30"
Text="{Binding Path=B401Id, Mode=TwoWay}" />
<Button x:Name="OkButton" Content="確定" Click="OKButton_Click"
Width="75" Height="23" HorizontalAlignment="Right"
Margin="0,12,0,0" Grid.Row="1"
Command="{Binding OKButtonCommand}"
CommandParameter="{Binding ElementName=c401xmmc, Path=DataContext}"
/>
2)後台ViewModel
public RelayCommand<c401xmmc> OKButtonCommand { get; private set; }
OKButtonCommand = new RelayCommand<c401xmmc>(OKButtonClick);//傳遞命令
OKButtonClick方法中處理
Messenger.Default.Send<c401xmmc>(param, "ChildWindow");
因為前面註冊:
Messenger.Default.Register<c401xmmc>(this, "ChildWindow", AddCustomer);
AddCustomer函數中處理資料
private void AddCustomer(c401xmmc param)
{
_customers.Add(param);
//可以儲存到資料庫
RaisePropertyChanged("C401xmmcs");
}
總結:
1.資料結構單對象,對象集合。演算法:對資料的處理。
2.不要去介面要資料。資料一定是在資料結構中。充分利用Siliverlight的綁定機制,不同控制項綁定方式不同。
擴充:
1.結合資料庫處理資料。初始化,處理資料。Silverlight與RIA WCF服務結合起來。
2.MEF外掛程式組裝不同的ViewModel。
練習思考:添加修改,刪除按鈕。
效果:
新增介面
代碼下載