Мы построили большое приложение на основе Библиотеки составных приложений и MVVM, используя элементы Инфраструктура.
Чтобы сэкономить время и сделать приложение более прямым, мы отказались от требования MVVM. Теперь у нас нет презентаций или ViewModels, и наши представления стали простыми UserControls, которые создаются следующим образом:
BaseEditor.cs:
using System.Windows.Controls;
namespace App
{
public class BaseEditor : UserControl
{
public string Title { get; set; }
public BaseEditor()
{
Title = "This was defined in the Base Editor.";
Loaded += new System.Windows.RoutedEventHandler(BaseEditor_Loaded);
}
void BaseEditor_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
StackPanel sp = new StackPanel();
TextBlock tb = new TextBlock();
tb.Text = Title;
sp.Children.Add(tb);
this.Content = sp;
}
}
}
CustomerEditor.cs:
namespace App
{
public class CustomerEditor : BaseEditor
{
public CustomerEditor()
{
Title = "This was overwritten by the CustomerEditor.";
}
}
}
Window1.cs.xaml:
<Window x:Class="App.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:App"
Title="Window1" Height="300" Width="300">
<Grid>
<local:CustomerEditor/>
</Grid>
</Window>
Помимо проблемы с тестируемостью и того факта, что это "чувствует себя грязным", делая это WPF, у меня есть только положительные эффекты из этого решения, например:
- мы можем наследовать наши не-XAML UserControls друг от друга
- мы используем столько же кода, сколько хотим, что ускоряет разработку
- прикрепление инфразвуковых элементов управления непосредственно к нашему классу моделей, поступающих из веб-службы, устраняло десятки небольших проблем с привязкой, которые мы имели с привязкой к Infragistics для ObservableCollections.
- даже в прямом WPF, отсутствие ObservableCollections создает проблемы, такие как неспособность создать простое меню уйти
- мы заменяем EventAggregator один на один с прямыми событиями с использованием UserControls и кода позади, что устраняет всевозможные проблемы с событиями
Кто-нибудь, кто делает MVVM в WPF, имел аналогичный опыт? Вы встречались с реальными проблемами в конечном итоге?