Суть M-V-VM, как мы все знаем, связана с целым рядом проблем. В таких шаблонах, как MVVM, MVC или MVP, основная цель состоит в том, чтобы отделить представление от данных, тем самым создав более гибкие компоненты. Сначала я продемонстрирую очень распространенный сценарий, встречающийся во многих приложениях WPF, а затем выскажу свое мнение:
Скажем, у нас есть приложение StockQuote, которое выводит кучу цитат и отображает их на экране. Как правило, у вас будет это:
StockQuote.cs: (модель)
public class StockQuote
{
public string Symbol { get; set; }
public double Price { get; set; }
}
StockQuoteViewModel.cs: (ViewModel)
public class StockQuoteViewModel
{
private ObservableCollection<StockQuote> _quotes = new ObservableCollection<StockQuote>();
public ObservableCollection<StockQuote> Quotes
{
get
{
return _quotes;
}
}
}
StockQuoteView.xaml (Просмотреть)
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.DataContext>
<local:StockQuoteViewModel/>
</Window.DataContext>
<Window.Resources>
<DataTemplate x:Key="listBoxDateTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Symbol}"/>
<TextBlock Text="{Binding Price}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemTemplate="{StaticResource listBoxDateTemplate}" ItemsSource="{Binding Quotes}"/>
</Grid>
</Window>
И тогда у вас будет какой-то сервис, который будет снабжать ObservableCollection новыми StockQuotes.
У меня такой вопрос: в этом типе сценария StockQuote считается моделью, и мы представляем ее представлению через ObservableCollection ViewModel. Что в основном означает, что наше представление обладает знаниями о модели. Разве это не нарушает всю парадигму M-V-VM? Или я что-то здесь упускаю ....?