باستخدام مربع القائمة (أو غيرها من ItemsControl) لاستضافة العروض Caliburn
-
05-07-2019 - |
سؤال
وإذا كان لدي MultiPresenter
وأنا باستخدام ListBox
لعرض Presenters
عن استضافتها، كيف يمكنني الحصول على Caliburn لاكتشاف وربط وجهات النظر وعرض نماذج للعناصر؟
وعلى سبيل المثال، إذا كان لدي وجهة نظر بسيطة ويبدو أن شيئا من هذا القبيل:
<UserControl x:Class="MyProject.Views.CarView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<ListBox ItemsSource="{Binding Parts}" />
</Grid>
</UserControl>
والتي لا بد للCarViewModel
:
public class CarViewModel : MultiPresenter
{
public BindableCollection<IPartViewModel> Parts { get; }
}
وجمع Parts
يحتوي على الكائنات المختلفة التي تنفذ IPresenter
ووجهات النظر المقابلة، على سبيل المثال WheelViewModel
وWheelView
، وEngineViewModel
وEngineView
.
وأود Caliburn لحل الآراء بالنسبة لي باستخدام استراتيجية الرأي. هل هذا ممكن؟ ماذا يجب أن أفعل لتعيين بشكل صحيح أعلى التسلسل الهرمي من العروض في هذه الحالة؟
المحلول
وليس لديك لتغيير التسلسل الهرمي مقدم لهذا الغرض. أقترح فقط لك أن تنظر باستخدام الخاصية MultiPresenter.Presenters
لجمع ViewModels الطفل وMultiPresenter.Open
وطرق MultiPresenter.Shutdown
إذا كنت بحاجة إلى فرض ViewModels الطفل دورة الحياة.
لقضية ملزمة، يجب عليك تحديد قالب للعناصر مربع القائمة:
<ListBox ItemsSource="{Binding Parts}">
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl cal:View.Model="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
وعن طريق cal:View.Model
المرفقة الملكية، ويأخذ إطار رعاية خلق مشاهدة المناسب لكل ViewModel، فإنه ملزم لViewModel وحقنه في ContentControl.
ويجب أيضا التأكد من أن لديك مساحة الاسم والطبقة التسمية لآراء وViewModels يتبع Caliburn <لأ href = "http://caliburn.codeplex.com/wikipage؟title=View٪20Strategies" يختلط = "نوفولو noreferrer" > اتفاقية الافتراضي إذا كنت تريد الخاص بك المشاهدات إلى أن يستدل بشكل صحيح من قبل الإطار. خلاف ذلك، لديك لكتابة IViewStrategy مخصص (هو ليس من الصعب، على الرغم من).
تحرير: الثابتة التعبير ملزمة في كال: الملكية View.Model م>