MVVM-шаблон для Paint-подобного WPF-приложения? - PullRequest
3 голосов
/ 10 июня 2009

Я сейчас на стадии планирования моего проекта.

Я думал об использовании MVVM-паттерна для моего приложения для тестирования, поддержки и т. Д. Я только начал разбираться в MVVM, но есть одна вещь, которую я просто не могу понять в контексте моего запланированного приложения .

Мое приложение направлено на то, чтобы помочь спортивным тренерам планировать упражнения, позволяя им визуально захватывать упражнения. Это разновидность краски для спортивных тренеров.

Я уже думал о том, как реализовать различные PaintObjects (так я их называю) для моего приложения (например, Ball, Player и т. Д.), И нашел наиболее удобный способ сделать это - написать класс с числом объекта DependencyProperties, а затем укажите шаблон XAML-ControlTemplate для этого класса.

Теперь, когда я подумал о структурировании экрана рисования своего приложения, я подумал, что я бы использовал что-то вроде PaintView.xaml с PaintViewModel.cs. Теперь вопрос в том, как PaintViewModel хранит объекты PaintObjects? Что такое PaintObjects? Они сами ViewModels? Они модели? Это взгляды?

Это та часть, в которой я полностью задумался и надеюсь получить совет от более опытных пользователей MVVM. Заранее спасибо!

С наилучшими пожеланиями, crischu

Ответы [ 2 ]

6 голосов
/ 10 июня 2009

Держите разделение между вашими виртуальными машинами (которые должны быть POCOs ) и представлениями. Ваши виртуальные машины не должны сильно зависеть от ваших представлений, потому что это затрудняет их тестирование в отдельности.

Итак, по звукам, вам понадобится что-то в вашей виртуальной машине для представления различных фрагментов в ваших сценах (BallViewModel, PlayerViewModel и так далее). Они могут быть выставлены из SceneViewModel:

public class SceneViewModel : ViewModel
{
    public ICollection<SceneObjectViewModel> SceneObjects
    {
        get { ... }
    }

    ...
}

public abstract class SceneObjectViewModel : ViewModel
{
    ...
}

public class BallViewModel : SceneObjectViewModel
{
    ...
}

Тогда ваш SceneView будет привязан к этой коллекции и отобразит каждый элемент, используя DataTemplate:

<ItemsControl ItemsSource="{Binding SceneObjects}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style>
            <Setter Property="Canvas.Top" Value="{Binding Top}"/>
            <Setter Property="Canvas.Left" Value="{Binding Left}"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

Приведенный выше XAML предполагает, что ваши DataTemplate определены в другом месте, и что каждый SceneObjectViewModel имеет свойство Top и Left.

0 голосов
/ 10 июня 2009

Привет, попробуйте взглянуть на это Рекомендации по составным приложениям для WPF и Silverlight

В нем есть MVVM, как и некоторые другие ... может помочь.

...