WPF-MVVM学习心德(WinForm转WPF心德)
接觸MVVM接近一段時間了,有一點理解,寫下來。
之前是做winform的,工作需要,學習wpf。優缺點就不用說類,網上一大堆。我自己理解的話,有下面幾點:
1、首先是界面的xmal和界面分離:wpf也同樣支持拖拉控件,但是使用wpf的人,都覺得在xmal中寫控件更屌一點。并且可以使用靜態資源(Window。Resources)設置每一個控件的樣式(Style),統一界面風格更方便。Style中的TargetType指定屬于某一類控件,Setter指定屬性(Property)和Value。
如 ?<Style x:key="TxtBoxStyle" TargetType=“TextBox”>
<Setter Property="Width" ?Value="100" />
</Style>
Style中還可以添加Template,然后放置更多的樣式模板。
2、數據綁定,可以說是MVVM的核心。界面和后臺的數據交互代碼,統統放置在VM(ViewModel)中,M(Model)中放置數據對象,如SQL數據庫中的訂單表,在Modle中就是一個對象類。V(View)是界面層。
? 最近做了一個DataGrid的數據綁定,列中放置了TextBox、ComboBox、Button的控件,使用數據綁定驅動控件。
DataGrid的Columns中使用DataGridTemplateColumn,可以放置TextBox等控件。并在TextBox中添加TextBoxChanged事件,引用(xmlns:ie="http://schemas.microsoft.com/expression/2010/interactivity"),
<ie:Interaction.Trigger>
<ie:EvenTrigger EventName="TextChanged">
<ie:InvokeCommandAction Command="{Binding String,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" CommandParameter="String" />
?</ie:Interaction.Trigger>
在Button中直接可以使用Command和CommandParameter,CommandParameter中可以使用ElementName傳遞任何控件到VM層。當然這樣就違背了MVVM的設計初中,但是必要情況下,也可以這么用。如在選擇了DataGrid的一行中的Button,如何取得Button所在行的其他列的信息呢?把DataGrid傳過去就很方便了,直接使用SelectedItem。當然也可以在V層 .cs代碼中獲取后傳遞到VM層。
在DataGrid綁定數據時,指定ItemsSource=“{Binding xxx}“,VM層中使用ObservableCollection<xxxModel> 集合,并設置OnPropertyChanged。DataGrid列中Binding對象xxModel中的屬性就可以了。
如此就可以在DataGrid中顯示數據。有時候這樣Binding后還是不能顯示數據,可能是Binding數據對象需要靜態什么的。如ComboBox中綁定,這個我是設定類ComboBox類,其中有Value和Text及Guid屬性,并在xxxModle(DataGrid數據源對象中)定義集合,并在集合中添加值。并且Binding時這樣寫(別問為為什么,也是在網上找到代碼):”{Binding xxxModel.xxxCbBox},RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid},Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}“。
?
Button的Visibility屬性同樣可以做Banding。
轉載于:https://www.cnblogs.com/ouylvr0625/p/7267751.html
總結
以上是生活随笔為你收集整理的WPF-MVVM学习心德(WinForm转WPF心德)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 判断字符串是否为空的四种方法、
- 下一篇: 金融工具