سؤال

أحاول معرفة كيفية إضافة datatemplate إلى قاموس موارد التطبيق. أنا على دراية بكيفية القيام بذلك عندما يكون datatemplate في XAML (عبر URI) ، لكنني غامض في كيفية القيام بذلك عند تعريف datatemplate في الكود.

ما لدي ، والذي لا يعمل هو-

        //Create DataTemplate
        DataTemplate template = new DataTemplate(typeof(CoordinateViewModel));
        FrameworkElementFactory ViewStack = new FrameworkElementFactory(typeof(CoordinateView));
        ViewStack.Name = "myViewStack";

        template.VisualTree = ViewStack;


        ResourceDictionary dictionary = new ResourceDictionary();
        dictionary.BeginInit();
        dictionary.Add(template, template);
        dictionary.EndInit();

        App.Current.Resources.MergedDictionaries.Add(dictionary);

تحرير: بأفضل ما أستطيع أن لا يجعله datatemplate في قاموس موارد التطبيق ، على الرغم من عدم إلقاء أي أخطاء. عندما يتم استدعاء ViewModel لاحقًا من XAML ، فإنه يتصرف كما لو كان لا يوجد datatemplate مناسب لعرضه. علي سبيل المثال،

<StackPanel>
    <ContentPresenter Content="{Binding ViewModel}" />
</StackPanel>

النتائج في نافذة فارغة مع النص "shellprototype.viewmodels.coordinateViewModel" المعروض ، على سبيل المثال ، لا يحتوي على قالب لعرض العرض.

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

المحلول

المفتاح هنا ، من أجل جعل هذا العمل بشكل صحيح ، هو الاستخدام datatemplatekey:

ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Add(new DataTemplateKey(typeof(CoordinateViewModel)), template);

إذا قمت بذلك ، فيجب أن تعمل كما هو محدد. ومع ذلك ، فإن FrameworkElementFactory هو ، وفقًا للمستندات ، "طريقة تم إهمالها لإنشاء قوالب برمجيًا" ، لذلك قد ترغب في تحليل XAML مباشرة.

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