تبديل القوالب البيانات في وقت التشغيل - تحديث مشكلة
-
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