تبديل القوالب البيانات في وقت التشغيل - تحديث مشكلة

StackOverflow https://stackoverflow.com/questions/320219

  •  11-07-2019
  •  | 
  •  

سؤال

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

var u = new UserControl();
u.Content = new MyCustomType(); // MyCustomType is not a control

ويتم تعريف UI عبر قوالب البيانات الموجودة في القواميس الموارد في ملفات XAML الخاصة

<ResourceDictionary ...>
    <DataTemplate DataType="{x:Type local:MyCustomType}">
        ...

وأنا تحميل موارد عند بدء تشغيل التطبيق وتطبيق ويسعد لعرض UI بلدي. ولكن إذا كنت إزالة قالب البيانات وإضافة واحدة جديدة (نفس المفتاح، نفس نوع البيانات) واجهة المستخدم لا يزال يستخدم قالب البيانات القديمة. بالطبع يمكنني إعادة ضبط-محتوى الحاوية جهدي لفرض تحديث ولكن هذا يبدو أحمق لأنني يجب أن يخطر كل عنصر تحكم عن التغيير، مثل هذا

var tmp = control.Content;
control.Content = null;
control.Content = tmp; // New data template will be used

وأي مناهج أخرى؟

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

المحلول

وذلك لأن الموارد الثابتة في القاموس الخاص بك. بمجرد أن يتم استخدامها، فإنها لن يتم تحديث. قد تتمكن من محاولة لإعادة تحميل القواميس، ولكن ذلك سيتم تحديث فقط الضوابط الجديدة، لا القديمة ..

إذا كنت ترغب في دعم DataTemplates متعددة، يمكنك أن تنظر الطبقة DataTemplateSelector، حيث يجري اختيار قالب وفقا لظروف الخاصة بك: http://msdn.microsoft.com/en- لنا / مكتبة / system.windows.controls.datatemplateselector.aspx

إذا كنت تحتاج إلى تبديل القوالب "على الطاير"، يمكنك أن تنظر دائما باستخدام ControlTemplates وملزم للملكية قالب من التحكم الخاصة بك ...

{Binding Converter={StaticResource YourAwesomeTemplateSwitcherConverter}}

وHTH

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