سؤال

أنا حاليا في مرحلة التخطيط لمشروع لي.

فكرت في استخدام نمط MVVM لتطبيقي للحصول على مدى قابلية التفصيل، والصيانة وما إلى ذلك. لقد بدأت فقط في الحصول على رأسي حول MVVM ولكن هناك شيء واحد لا يمكنني معرفة ذلك في سياق تطبيقي المخطط.

يهدف طلبي إلى مساعدة المدربين الرياضيين بتخطيط التمرين من خلال السماح لهم بالتقاط تمارين بصريا. إنه نوع من الطلاء للمدربين الرياضيين.

لقد فكرت بالفعل في كيفية تنفيذ PaintObjects المختلف (هذا ما أسميهه) لتطبيقي (على سبيل المثال: Ball أو Player وما إلى ذلك) ووجد أن الطريقة الأكثر ملاءمة للقيام بها هي كتابة فئة مع عدد من الإعتدال ثم تزويد Xaml-Controltemplate لهذه الفئة.

الآن عندما أفكر في هيكلة شاشة الطلاء في طلبي، احسب أنني سوف أستخدم شيئا مثل PaintView.xaml مع PaintViewModel.cs. الآن السؤال هو كيف يخزن PaintViewModel PaintObjects؟ ما هي paintobjects على أي حال؟ هل هم يعثرون أنفسهم؟ هل هم نماذج؟ هل ينظرون؟

هذا هو الجزء حيث علقت تماما مدروسا وتأمل الحصول على بعض النصائح من قبل مستخدمي MVVM أكثر خبرة. شكرا لك مقدما!

مع أطيب التحيات، الأهاك

هل كانت مفيدة؟

المحلول

الحفاظ على الفصل بين VMS الخاص بك (الذي يجب أن يكون pocos) وجهات النظر. يجب ألا يكون لديك VMS تبعية صلبة على وجهات نظركم، لأن ذلك يجعل من الصعب اختبارها بمعزل.

لذلك من أصوات ذلك، ستحتاج إلى شيء في VM الخاص بك لتمثيل مختلف البتات والقطع في مشاهدك (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يتم تعريف S في مكان آخر، وهذا كل SceneObjectViewModel لديه أ Top و Left منشأه.

نصائح أخرى

مرحبا حاول النظر إلى هذاتطبيق مركب Guidency ل WPF و Silverlight

لديها MVVM داخل ذلك وكذلك بعض الآخرين ... قد يساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top