Tôi có thể trả lời cách tôi sử dụng mẫu MVVM. MVVM tốt hơn trong các trường hợp sau:
1 Nếu một số điều khiển bị ràng buộc với một thuộc tính duy nhất.
MVVM:
<TextBlock x:Name="text1" Visibility="{Binding IsSomePropertyTrue, Converter={StaticResource VisibilityConverter}"/>
<TextBlock x:Name="text2" Visibility="{Binding IsSomePropertyTrue, Converter={StaticResource VisibilityConverter}"/>
tôi nhanh chóng có thể thêm một điều khiển tương tự hoặc loại bỏ một điều khiển hiện có.
Hãy so sánh với code-behind:
public string IsSomePropertyTrue
{
set
{
//...
text1.Visibility = value;
text2.Visibility = value;
}
}
2 Thay vì một đa chuyển đổi
công Cọ StateColor { được { if (this.State == State.Edited & & this.IsPriority) trả về SolidColorBrush mới (Color.FromArgb (255, 0, 255, 0)); // ... }}
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Background="{Binding StateColor}" Text="{Binding State}"/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
3 Là một mô hình mục trong điều khiển giống như ListBox hoặc DataGrid. Ví dụ, nếu tôi muốn tạo một danh sách các mục có nút remove gần mỗi mục, tôi sẽ tạo ra một điều khiển ItemView và một lớp ItemViewModel.
<ItemsControl ItemsSource="{Binding SomeItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<view:ItemView DataContext="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
4 Sao chép dữ liệu từ một cái nhìn khác:
public JournalEntryViewModel(SalesOrderViewModel vm) {}
5 ViewModel có thể kế thừa CLR-lớp học và thực hiện các giao diện (INotifyPropertyChanged hoặc INotifyDataErrorInfo).
Ngoài ra tôi sử dụng MVVM để thay thế sự kiện bằng lệnh hoặc thuộc tính. Và sử dụng các lực lượng ViewModels để gọi các thuộc tính theo tên dễ hiểu.
Nếu bạn cung cấp tài sản và lệnh trong một mã-đằng sau và ràng buộc họ sử dụng 'this.DataContext = này;', đó là một viewmodel quá . Chỉ cần không sử dụng mã như 'this.firstNameTextBlock.Text = this.CurrentItem.FirstName;' – vorrtex